home *** CD-ROM | disk | FTP | other *** search
/ Kompuutteri Kaikille K-CD 2002 #1 / K-CD_2002-01.iso / Delphi / INSTALL / program files / Borland / Delphi6 / Doc / ComCtrls.int < prev    next >
Text File  |  2001-05-22  |  97KB  |  2,678 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {  Copyright (c) 1996-2001 Borland Software Corporation }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit ComCtrls;
  11.  
  12. {$R-,T-,H+,X+}
  13.  
  14. interface
  15.  
  16. uses Messages, Windows, SysUtils, CommCtrl, Controls, Forms, Classes,
  17.   Menus, Graphics, StdCtrls, RichEdit, ToolWin, ImgList, ExtCtrls, ListActns;
  18.  
  19. type
  20.   THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon,
  21.     htOnIndent, htOnLabel, htOnRight, htOnStateIcon, htToLeft, htToRight);
  22.   THitTests = set of THitTest;
  23.  
  24.   TCustomTabControl = class;
  25.  
  26.   TTabChangingEvent = procedure(Sender: TObject;
  27.     var AllowChange: Boolean) of object;
  28.  
  29.   TTabPosition = (tpTop, tpBottom, tpLeft, tpRight);
  30.  
  31.   TTabStyle = (tsTabs, tsButtons, tsFlatButtons);
  32.  
  33.   TDrawTabEvent = procedure(Control: TCustomTabControl; TabIndex: Integer;
  34.     const Rect: TRect; Active: Boolean) of object;
  35.   TTabGetImageEvent = procedure(Sender: TObject; TabIndex: Integer;
  36.     var ImageIndex: Integer) of object;
  37.  
  38.   TCustomTabControl = class(TWinControl)
  39.   protected
  40.     procedure AdjustClientRect(var Rect: TRect); override;
  41.     function CanChange: Boolean; dynamic;
  42.     function CanShowTab(TabIndex: Integer): Boolean; virtual;
  43.     procedure Change; dynamic;
  44.     procedure CreateParams(var Params: TCreateParams); override;
  45.     procedure CreateWnd; override;
  46.     procedure DrawTab(TabIndex: Integer; const Rect: TRect; Active: Boolean); virtual;
  47.     function GetImageIndex(TabIndex: Integer): Integer; virtual;
  48.     procedure Loaded; override;
  49.     procedure UpdateTabImages;
  50.     property DisplayRect: TRect;
  51.     property HotTrack: Boolean default False;
  52.     property Images: TCustomImageList;
  53.     property MultiLine: Boolean default False;
  54.     property MultiSelect: Boolean default False;
  55.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  56.     property OwnerDraw: Boolean default False;
  57.     property RaggedRight: Boolean default False;
  58.     property ScrollOpposite: Boolean default False;
  59.     property Style: TTabStyle default tsTabs;
  60.     property TabHeight: Smallint default 0;
  61.     property TabIndex: Integer default -1;
  62.     property TabPosition: TTabPosition default tpTop;
  63.     property Tabs: TStrings;
  64.     property TabWidth: Smallint default 0;
  65.     property OnChange: TNotifyEvent;
  66.     property OnChanging: TTabChangingEvent;
  67.     property OnDrawTab: TDrawTabEvent;
  68.     property OnGetImageIndex: TTabGetImageEvent;
  69.   public
  70.     constructor Create(AOwner: TComponent); override;
  71.     destructor Destroy; override;
  72.     function IndexOfTabAt(X, Y: Integer): Integer;
  73.     function GetHitTestInfoAt(X, Y: Integer): THitTests;
  74.     function TabRect(Index: Integer): TRect;
  75.     function RowCount: Integer;
  76.     procedure ScrollTabs(Delta: Integer);
  77.     property Canvas: TCanvas;
  78.     property TabStop default True;
  79.   end;
  80.  
  81.   TTabControl = class(TCustomTabControl)
  82.   public
  83.     property DisplayRect;
  84.   published
  85.     property Align;
  86.     property Anchors;
  87.     property BiDiMode;
  88.     property Constraints;
  89.     property DockSite;
  90.     property DragCursor;
  91.     property DragKind;
  92.     property DragMode;
  93.     property Enabled;
  94.     property Font;
  95.     property HotTrack;
  96.     property Images;
  97.     property MultiLine;
  98.     property MultiSelect;
  99.     property OwnerDraw;
  100.     property ParentBiDiMode;
  101.     property ParentFont;
  102.     property ParentShowHint;
  103.     property PopupMenu;
  104.     property RaggedRight;
  105.     property ScrollOpposite;
  106.     property ShowHint;
  107.     property Style;
  108.     property TabHeight;
  109.     property TabOrder;
  110.     property TabPosition;
  111.     property Tabs;
  112.     property TabIndex;  // must be after Tabs
  113.     property TabStop;
  114.     property TabWidth;
  115.     property Visible;
  116.     property OnChange;
  117.     property OnChanging;
  118.     property OnContextPopup;
  119.     property OnDockDrop;
  120.     property OnDockOver;
  121.     property OnDragDrop;
  122.     property OnDragOver;
  123.     property OnDrawTab;
  124.     property OnEndDock;
  125.     property OnEndDrag;
  126.     property OnEnter;
  127.     property OnExit;
  128.     property OnGetImageIndex;
  129.     property OnGetSiteInfo;
  130.     property OnMouseDown;
  131.     property OnMouseMove;
  132.     property OnMouseUp;
  133.     property OnResize;
  134.     property OnStartDock;
  135.     property OnStartDrag;
  136.     property OnUnDock;
  137.   end;
  138.  
  139.   TPageControl = class;
  140.  
  141.   TTabSheet = class(TWinControl)
  142.   protected
  143.     procedure CreateParams(var Params: TCreateParams); override;
  144.     procedure DoHide; dynamic;
  145.     procedure DoShow; dynamic;
  146.     procedure ReadState(Reader: TReader); override;
  147.   public
  148.     constructor Create(AOwner: TComponent); override;
  149.     destructor Destroy; override;
  150.     property PageControl: TPageControl;
  151.     property TabIndex: Integer;
  152.   published
  153.     property BorderWidth;
  154.     property Caption;
  155.     property DragMode;
  156.     property Enabled;
  157.     property Font;
  158.     property Height stored False;
  159.     property Highlighted: Boolean default False;
  160.     property ImageIndex: TImageIndex default 0;
  161.     property Left stored False;
  162.     property Constraints;
  163.     property PageIndex: Integer;
  164.     property ParentFont;
  165.     property ParentShowHint;
  166.     property PopupMenu;
  167.     property ShowHint;
  168.     property TabVisible: Boolean default True;
  169.     property Top stored False;
  170.     property Visible stored False;
  171.     property Width stored False;
  172.     property OnContextPopup;
  173.     property OnDragDrop;
  174.     property OnDragOver;
  175.     property OnEndDrag;
  176.     property OnEnter;
  177.     property OnExit;
  178.     property OnHide: TNotifyEvent;
  179.     property OnMouseDown;
  180.     property OnMouseMove;
  181.     property OnMouseUp;
  182.     property OnResize;
  183.     property OnShow: TNotifyEvent;
  184.     property OnStartDrag;
  185.   end;
  186.  
  187.   TPageControl = class(TCustomTabControl)
  188.   protected
  189.     function CanShowTab(TabIndex: Integer): Boolean; override;
  190.     procedure Change; override;
  191.     procedure DoAddDockClient(Client: TControl; const ARect: TRect); override;
  192.     procedure DockOver(Source: TDragDockObject; X, Y: Integer;
  193.       State: TDragState; var Accept: Boolean); override;
  194.     procedure DoRemoveDockClient(Client: TControl); override;
  195.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  196.     function GetImageIndex(TabIndex: Integer): Integer; override;
  197.     function GetPageFromDockClient(Client: TControl): TTabSheet;
  198.     procedure GetSiteInfo(Client: TControl; var InfluenceRect: TRect;
  199.       MousePos: TPoint; var CanDock: Boolean); override;
  200.     procedure Loaded; override;
  201.     procedure SetChildOrder(Child: TComponent; Order: Integer); override;
  202.     procedure ShowControl(AControl: TControl); override;
  203.     procedure UpdateActivePage; virtual;
  204.   public
  205.     constructor Create(AOwner: TComponent); override;
  206.     destructor Destroy; override;
  207.     function FindNextPage(CurPage: TTabSheet;
  208.       GoForward, CheckTabVisible: Boolean): TTabSheet;
  209.     procedure SelectNextPage(GoForward: Boolean; CheckTabVisible: Boolean = True);
  210.     property ActivePageIndex: Integer;
  211.     property PageCount: Integer;
  212.     property Pages[Index: Integer]: TTabSheet;
  213.   published
  214.     property ActivePage: TTabSheet;
  215.     property Align;
  216.     property Anchors;
  217.     property BiDiMode;
  218.     property Constraints;
  219.     property DockSite;
  220.     property DragCursor;
  221.     property DragKind;
  222.     property DragMode;
  223.     property Enabled;
  224.     property Font;
  225.     property HotTrack;
  226.     property Images;
  227.     property MultiLine;
  228.     property OwnerDraw;
  229.     property ParentBiDiMode;
  230.     property ParentFont;
  231.     property ParentShowHint;
  232.     property PopupMenu;
  233.     property RaggedRight;
  234.     property ScrollOpposite;
  235.     property ShowHint;
  236.     property Style;
  237.     property TabHeight;
  238.     property TabIndex;
  239.     property TabOrder;
  240.     property TabPosition;
  241.     property TabStop;
  242.     property TabWidth;
  243.     property Visible;
  244.     property OnChange;
  245.     property OnChanging;
  246.     property OnContextPopup;
  247.     property OnDockDrop;
  248.     property OnDockOver;
  249.     property OnDragDrop;
  250.     property OnDragOver;
  251.     property OnDrawTab;
  252.     property OnEndDock;
  253.     property OnEndDrag;
  254.     property OnEnter;
  255.     property OnExit;
  256.     property OnGetImageIndex;
  257.     property OnGetSiteInfo;
  258.     property OnMouseDown;
  259.     property OnMouseMove;
  260.     property OnMouseUp;
  261.     property OnResize;
  262.     property OnStartDock;
  263.     property OnStartDrag;
  264.     property OnUnDock;
  265.   end;
  266.  
  267. { TCustomStatusBar }
  268.  
  269.   TCustomStatusBar = class;
  270.   TStatusPanels = class;
  271.   TStatusPanelStyle = (psText, psOwnerDraw);
  272.   TStatusPanelBevel = (pbNone, pbLowered, pbRaised);
  273.   TStatusPanelClass = class of TStatusPanel;
  274.  
  275.   TStatusPanel = class(TCollectionItem)
  276.   protected
  277.     function GetDisplayName: string; override;
  278.   public
  279.     constructor Create(Collection: TCollection); override;
  280.     procedure Assign(Source: TPersistent); override;
  281.     procedure ParentBiDiModeChanged;
  282.     function UseRightToLeftAlignment: Boolean;
  283.     function UseRightToLeftReading: Boolean;
  284.   published
  285.     property Alignment: TAlignment default taLeftJustify;
  286.     property Bevel: TStatusPanelBevel default pbLowered;
  287.     property BiDiMode: TBiDiMode;
  288.     property ParentBiDiMode: Boolean default True;
  289.     property Style: TStatusPanelStyle default psText;
  290.     property Text: string;
  291.     property Width: Integer;
  292.   end;
  293.  
  294.   TStatusPanels = class(TCollection)
  295.   protected
  296.     function GetOwner: TPersistent; override;
  297.     procedure Update(Item: TCollectionItem); override;
  298.   public
  299.     constructor Create(StatusBar: TCustomStatusBar);
  300.     function Add: TStatusPanel;
  301.     function AddItem(Item: TStatusPanel; Index: Integer): TStatusPanel;
  302.     function Insert(Index: Integer): TStatusPanel;
  303.     property Items[Index: Integer]: TStatusPanel; default;
  304.   end;
  305.  
  306.   TCustomDrawPanelEvent = procedure(StatusBar: TCustomStatusBar; Panel: TStatusPanel;
  307.     const Rect: TRect) of object;
  308.   TSBCreatePanelClassEvent = procedure(Sender: TCustomStatusBar;
  309.     var PanelClass: TStatusPanelClass) of object;
  310.  
  311.   TCustomStatusBar = class(TWinControl)
  312.   protected
  313.     procedure ChangeScale(M, D: Integer); override;
  314.     function CreatePanel: TStatusPanel; virtual;
  315.     function CreatePanels: TStatusPanels; virtual;
  316.     procedure CreateParams(var Params: TCreateParams); override;
  317.     procedure CreateWnd; override;
  318.     function DoHint: Boolean; virtual;
  319.     procedure DrawPanel(Panel: TStatusPanel; const Rect: TRect); dynamic;
  320.     function GetPanelClass: TStatusPanelClass; virtual;
  321.     function IsFontStored: Boolean;
  322.     procedure SetParent(AParent: TWinControl); override;
  323.   public
  324.     constructor Create(AOwner: TComponent); override;
  325.     destructor Destroy; override;
  326.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  327.     procedure FlipChildren(AllLevels: Boolean); override;
  328.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  329.     property Canvas: TCanvas;
  330.     property AutoHint: Boolean;
  331.     property Panels: TStatusPanels;
  332.     property SimplePanel: Boolean;
  333.     property SimpleText: string;
  334.     property SizeGrip: Boolean;
  335.     property UseSystemFont: Boolean;
  336.     property OnCreatePanelClass: TSBCreatePanelClassEvent;
  337.     property OnHint: TNotifyEvent;
  338.     property OnDrawPanel: TCustomDrawPanelEvent;
  339.   end;
  340.  
  341. { TStatusBar }
  342.  
  343.   TStatusBar = class;
  344.  
  345.   TDrawPanelEvent = procedure(StatusBar: TStatusBar; Panel: TStatusPanel;
  346.     const Rect: TRect) of object;
  347.  
  348.   TStatusBar = class(TCustomStatusBar)
  349.   published
  350.     property Action;
  351.     property AutoHint default False;
  352.     property Align default alBottom;
  353.     property Anchors;
  354.     property BiDiMode;
  355.     property BorderWidth;
  356.     property Color default clBtnFace;
  357.     property DragCursor;
  358.     property DragKind;
  359.     property DragMode;
  360.     property Enabled;
  361.     property Font stored IsFontStored;
  362.     property Constraints;
  363.     property Panels;
  364.     property ParentBiDiMode;
  365.     property ParentColor default False;
  366.     property ParentFont default False;
  367.     property ParentShowHint;
  368.     property PopupMenu;
  369.     property ShowHint;
  370.     property SimplePanel;
  371.     property SimpleText;
  372.     property SizeGrip default True;
  373.     property UseSystemFont default True;
  374.     property Visible;
  375.     property OnClick;
  376.     property OnContextPopup;
  377.     property OnCreatePanelClass;    
  378.     property OnDblClick;
  379.     property OnDragDrop;
  380.     property OnDragOver;
  381.     property OnEndDock;
  382.     property OnEndDrag;
  383.     property OnHint;
  384.     property OnMouseDown;
  385.     property OnMouseMove;
  386.     property OnMouseUp;
  387.     // Required for backwards compatibility with the old event signature
  388.     property OnDrawPanel: TDrawPanelEvent;
  389.     property OnResize;
  390.     property OnStartDock;
  391.     property OnStartDrag;
  392.   end;
  393.  
  394. { Custom draw }
  395.  
  396.   TCustomDrawTarget = (dtControl, dtItem, dtSubItem);
  397.   TCustomDrawStage = (cdPrePaint, cdPostPaint, cdPreErase, cdPostErase);
  398.   TCustomDrawState = set of (cdsSelected, cdsGrayed, cdsDisabled, cdsChecked,
  399.     cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate);
  400.  
  401. { TCustomHeaderControl }
  402.  
  403.   TCustomHeaderControl = class;
  404.   
  405. { THeaderControl }
  406.  
  407.   THeaderControl = class;
  408.  
  409.   THeaderSectionStyle = (hsText, hsOwnerDraw);
  410.   THeaderSectionClass = class of THeaderSection;
  411.  
  412.   THeaderSection = class(TCollectionItem)
  413.   protected
  414.     function GetDisplayName: string; override;
  415.   public
  416.     constructor Create(Collection: TCollection); override;
  417.     procedure Assign(Source: TPersistent); override;
  418.     procedure ParentBiDiModeChanged;
  419.     function UseRightToLeftAlignment: Boolean;
  420.     function UseRightToLeftReading: Boolean;
  421.     property Left: Integer;
  422.     property Right: Integer;
  423.   published
  424.     property Alignment: TAlignment default taLeftJustify;
  425.     property AllowClick: Boolean default True;
  426.     property AutoSize: Boolean default False;
  427.     property BiDiMode: TBiDiMode;
  428.     property ImageIndex: TImageIndex;
  429.     property MaxWidth: Integer default 10000;
  430.     property MinWidth: Integer default 0;
  431.     property ParentBiDiMode: Boolean default True;
  432.     property Style: THeaderSectionStyle default hsText;
  433.     property Text: string;
  434.     property Width: Integer;
  435.   end;
  436.  
  437.   THeaderSections = class(TCollection)
  438.   protected
  439.     function GetOwner: TPersistent; override;
  440.     procedure Update(Item: TCollectionItem); override;
  441.   public
  442.     constructor Create(HeaderControl: TCustomHeaderControl);
  443.     function Add: THeaderSection;
  444.     function AddItem(Item: THeaderSection; Index: Integer): THeaderSection;
  445.     function Insert(Index: Integer): THeaderSection;
  446.     property Items[Index: Integer]: THeaderSection; default;
  447.   end;
  448.  
  449.   TSectionTrackState = (tsTrackBegin, tsTrackMove, tsTrackEnd);
  450.  
  451.   TCustomDrawSectionEvent = procedure(HeaderControl: TCustomHeaderControl;
  452.     Section: THeaderSection; const Rect: TRect; Pressed: Boolean) of object;
  453.   TCustomSectionNotifyEvent = procedure(HeaderControl: TCustomHeaderControl;
  454.     Section: THeaderSection) of object;
  455.   TCustomSectionTrackEvent = procedure(HeaderControl: TCustomHeaderControl;
  456.     Section: THeaderSection; Width: Integer;
  457.     State: TSectionTrackState) of object;
  458.   TSectionDragEvent = procedure (Sender: TObject; FromSection, ToSection: THeaderSection;
  459.     var AllowDrag: Boolean) of object;
  460.   TCustomHCCreateSectionClassEvent = procedure(Sender: TCustomHeaderControl;
  461.     var SectionClass: THeaderSectionClass) of object;
  462.  
  463.   THeaderStyle = (hsButtons, hsFlat);
  464.  
  465.   TCustomHeaderControl = class(TWinControl)
  466.   protected
  467.     function CreateSection: THeaderSection; virtual;
  468.     function CreateSections: THeaderSections; virtual;
  469.     procedure CreateParams(var Params: TCreateParams); override;
  470.     procedure CreateWnd; override;
  471.     procedure DestroyWnd; override;
  472.     procedure DrawSection(Section: THeaderSection; const Rect: TRect;
  473.       Pressed: Boolean); dynamic;
  474.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  475.     procedure SectionClick(Section: THeaderSection); dynamic;
  476.     procedure SectionDrag(FromSection, ToSection: THeaderSection; var AllowDrag: Boolean); dynamic;
  477.     procedure SectionEndDrag; dynamic;
  478.     procedure SectionResize(Section: THeaderSection); dynamic;
  479.     procedure SectionTrack(Section: THeaderSection; Width: Integer;
  480.       State: TSectionTrackState); dynamic;
  481.     procedure SetImages(Value: TCustomImageList); virtual;
  482.     procedure WndProc(var Message: TMessage); override;
  483.   public
  484.     constructor Create(AOwner: TComponent); override;
  485.     destructor Destroy; override;
  486.     property Canvas: TCanvas;
  487.     procedure FlipChildren(AllLevels: Boolean); override;
  488.   published
  489.     property Align default alTop;
  490.     property Anchors;
  491.     property BiDiMode;
  492.     property BorderWidth;
  493.     property DragCursor;
  494.     property DragKind;
  495.     property DragMode;
  496.     property DragReorder: Boolean;
  497.     property FullDrag: Boolean;
  498.     property HotTrack: Boolean;
  499.     property Enabled;
  500.     property Font;
  501.     property Images: TCustomImageList;
  502.     property Constraints;
  503.     property Sections: THeaderSections;
  504.     property Style: THeaderStyle;
  505.     property OnCreateSectionClass: TCustomHCCreateSectionClassEvent;
  506.     property OnDrawSection: TCustomDrawSectionEvent;
  507.     property OnSectionClick: TCustomSectionNotifyEvent;
  508.     property OnSectionDrag: TSectionDragEvent;
  509.     property OnSectionEndDrag: TNotifyEvent;
  510.     property OnSectionResize: TCustomSectionNotifyEvent;
  511.     property OnSectionTrack: TCustomSectionTrackEvent;
  512.   end;
  513.  
  514. { THeaderControl }
  515.  
  516.   TDrawSectionEvent = procedure(HeaderControl: THeaderControl;
  517.     Section: THeaderSection; const Rect: TRect; Pressed: Boolean) of object;
  518.   TSectionNotifyEvent = procedure(HeaderControl: THeaderControl;
  519.     Section: THeaderSection) of object;
  520.   TSectionTrackEvent = procedure(HeaderControl: THeaderControl;
  521.     Section: THeaderSection; Width: Integer;
  522.     State: TSectionTrackState) of object;
  523.   THCCreateSectionClassEvent = procedure(Sender: THeaderControl;
  524.     var SectionClass: THeaderSectionClass) of object;
  525.  
  526.   THeaderControl = class(TCustomHeaderControl)
  527.   published
  528.     property Align default alTop;
  529.     property Anchors;
  530.     property BiDiMode;
  531.     property BorderWidth;
  532.     property DragCursor;
  533.     property DragKind;
  534.     property DragMode;
  535.     property DragReorder;
  536.     property Enabled;
  537.     property Font;
  538.     property FullDrag default True;
  539.     property HotTrack default False;
  540.     property Images;
  541.     property Constraints;
  542.     property Sections;
  543.     property ShowHint;
  544.     property Style default hsButtons;
  545.     property ParentBiDiMode;
  546.     property ParentFont;
  547.     property ParentShowHint;
  548.     property PopupMenu;
  549.     property Visible;
  550.     property OnContextPopup;
  551.     property OnCreateSectionClass;
  552.     property OnDragDrop;
  553.     property OnDragOver;
  554.     property OnEndDock;
  555.     property OnEndDrag;
  556.     property OnMouseDown;
  557.     property OnMouseMove;
  558.     property OnMouseUp;
  559.     property OnResize;
  560.     // Required for backwards compatibility with the old events
  561.     property OnDrawSection: TDrawSectionEvent;
  562.     property OnSectionClick: TSectionNotifyEvent;
  563.     property OnSectionResize: TSectionNotifyEvent;
  564.     property OnSectionTrack: TSectionTrackEvent;
  565.     property OnSectionDrag;
  566.     property OnSectionEndDrag;
  567.     property OnStartDock;
  568.     property OnStartDrag;
  569.   end;
  570.  
  571. { TTreeNode }
  572.  
  573.   TCustomTreeView = class;
  574.   TTreeNodes = class;
  575.  
  576.   TNodeState = (nsCut, nsDropHilited, nsFocused, nsSelected, nsExpanded);
  577.   TNodeAttachMode = (naAdd, naAddFirst, naAddChild, naAddChildFirst, naInsert);
  578.   TAddMode = (taAddFirst, taAdd, taInsert);
  579.  
  580.   PNodeInfo = ^TNodeInfo;
  581.   TNodeInfo = packed record
  582.     ImageIndex: Integer;
  583.     SelectedIndex: Integer;
  584.     StateIndex: Integer;
  585.     OverlayIndex: Integer;
  586.     Data: Pointer;
  587.     Count: Integer;
  588.     Text: string[255];
  589.   end;
  590.  
  591.   TTreeNodeClass = class of TTreeNode;
  592.   TTreeNode = class(TPersistent)
  593.   protected
  594.     function GetState(NodeState: TNodeState): Boolean;
  595.     procedure SetState(NodeState: TNodeState; Value: Boolean);
  596.     procedure SetSelectedBit(Value: Boolean);
  597.   public
  598.     constructor Create(AOwner: TTreeNodes);
  599.     destructor Destroy; override;
  600.     function AlphaSort(ARecurse: Boolean = False): Boolean;
  601.     procedure Assign(Source: TPersistent); override;
  602.     procedure Collapse(Recurse: Boolean);
  603.     function CustomSort(SortProc: TTVCompare; Data: Longint; ARecurse: Boolean = False): Boolean;
  604.     procedure Delete;
  605.     procedure DeleteChildren;
  606.     function DisplayRect(TextOnly: Boolean): TRect;
  607.     function EditText: Boolean;
  608.     procedure EndEdit(Cancel: Boolean);
  609.     procedure Expand(Recurse: Boolean);
  610.     function getFirstChild: TTreeNode; {GetFirstChild conflicts with C++ macro}
  611.     function GetHandle: HWND;
  612.     function GetLastChild: TTreeNode;
  613.     function GetNext: TTreeNode;
  614.     function GetNextChild(Value: TTreeNode): TTreeNode;
  615.     function getNextSibling: TTreeNode; {GetNextSibling conflicts with C++ macro}
  616.     function GetNextVisible: TTreeNode;
  617.     function GetPrev: TTreeNode;
  618.     function GetPrevChild(Value: TTreeNode): TTreeNode;
  619.     function getPrevSibling: TTreeNode; {GetPrevSibling conflicts with a C++ macro}
  620.     function GetPrevVisible: TTreeNode;
  621.     function HasAsParent(Value: TTreeNode): Boolean;
  622.     function IndexOf(Value: TTreeNode): Integer;
  623.     procedure MakeVisible;
  624.     procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode); virtual;
  625.     property AbsoluteIndex: Integer;
  626.     function IsFirstNode: Boolean;
  627.     property Count: Integer;
  628.     property Cut: Boolean;
  629.     property Data: Pointer;
  630.     property Deleting: Boolean;
  631.     property Focused: Boolean;
  632.     property DropTarget: Boolean;
  633.     property Selected: Boolean;
  634.     property Expanded: Boolean;
  635.     property Handle: HWND;
  636.     property HasChildren: Boolean;
  637.     property ImageIndex: TImageIndex;
  638.     property Index: Integer;
  639.     property IsVisible: Boolean;
  640.     property Item[Index: Integer]: TTreeNode; default;
  641.     property ItemId: HTreeItem;
  642.     property Level: Integer;
  643.     property OverlayIndex: Integer;
  644.     property Owner: TTreeNodes;
  645.     property Parent: TTreeNode;
  646.     property SelectedIndex: Integer;
  647.     property StateIndex: Integer;
  648.     property Text: string;
  649.     property TreeView: TCustomTreeView;
  650.   end;
  651.  
  652. { TTreeNodes }
  653.  
  654.   PNodeCache = ^TNodeCache;
  655.   TNodeCache = record
  656.     CacheNode: TTreeNode;
  657.     CacheIndex: Integer;
  658.   end;
  659.  
  660.   TTreeNodes = class(TPersistent)
  661.   protected
  662.     function AddItem(Parent, Target: HTreeItem; const Item: TTVItem;
  663.       AddMode: TAddMode): HTreeItem;
  664.     procedure DefineProperties(Filer: TFiler); override;
  665.     function CreateItem(Node: TTreeNode): TTVItem;
  666.     function GetCount: Integer;
  667.     procedure SetItem(Index: Integer; Value: TTreeNode);
  668.     procedure SetUpdateState(Updating: Boolean);
  669.     property Reading: Boolean;
  670.   public
  671.     constructor Create(AOwner: TCustomTreeView);
  672.     destructor Destroy; override;
  673.     function AddChildFirst(Parent: TTreeNode; const S: string): TTreeNode;
  674.     function AddChild(Parent: TTreeNode; const S: string): TTreeNode;
  675.     function AddChildObjectFirst(Parent: TTreeNode; const S: string;
  676.       Ptr: Pointer): TTreeNode;
  677.     function AddChildObject(Parent: TTreeNode; const S: string;
  678.       Ptr: Pointer): TTreeNode;
  679.     function AddFirst(Sibling: TTreeNode; const S: string): TTreeNode;
  680.     function Add(Sibling: TTreeNode; const S: string): TTreeNode;
  681.     function AddObjectFirst(Sibling: TTreeNode; const S: string;
  682.       Ptr: Pointer): TTreeNode;
  683.     function AddObject(Sibling: TTreeNode; const S: string;
  684.       Ptr: Pointer): TTreeNode;
  685.     function AddNode(Node, Relative: TTreeNode; const S: string;
  686.       Ptr: Pointer; Method: TNodeAttachMode): TTreeNode;
  687.     function AlphaSort(ARecurse: Boolean = False): Boolean;
  688.     procedure Assign(Source: TPersistent); override;
  689.     procedure BeginUpdate;
  690.     procedure Clear;
  691.     function CustomSort(SortProc: TTVCompare; Data: Longint; ARecurse: Boolean = False): Boolean;
  692.     procedure Delete(Node: TTreeNode);
  693.     procedure EndUpdate;
  694.     function GetFirstNode: TTreeNode;
  695.     function GetNode(ItemId: HTreeItem): TTreeNode;
  696.     function Insert(Sibling: TTreeNode; const S: string): TTreeNode;
  697.     function InsertObject(Sibling: TTreeNode; const S: string;
  698.       Ptr: Pointer): TTreeNode;
  699.     function InsertNode(Node, Sibling: TTreeNode; const S: string;
  700.       Ptr: Pointer): TTreeNode;
  701.     property Count: Integer;
  702.     property Handle: HWND;
  703.     property Item[Index: Integer]: TTreeNode; default;
  704.     property Owner: TCustomTreeView;
  705.   end;
  706.  
  707. { TCustomTreeView }
  708.  
  709.   TSortType = (stNone, stData, stText, stBoth);
  710.   TMultiSelectStyles = (msControlSelect, msShiftSelect,
  711.                         msVisibleOnly, msSiblingOnly);
  712.   TMultiSelectStyle = set of TMultiSelectStyles;
  713.   ETreeViewError = class(Exception);
  714.  
  715.   TTVChangingEvent = procedure(Sender: TObject; Node: TTreeNode;
  716.     var AllowChange: Boolean) of object;
  717.   TTVChangedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
  718.   TTVEditingEvent = procedure(Sender: TObject; Node: TTreeNode;
  719.     var AllowEdit: Boolean) of object;
  720.   TTVEditedEvent = procedure(Sender: TObject; Node: TTreeNode; var S: string) of object;
  721.   TTVExpandingEvent = procedure(Sender: TObject; Node: TTreeNode;
  722.     var AllowExpansion: Boolean) of object;
  723.   TTVCollapsingEvent = procedure(Sender: TObject; Node: TTreeNode;
  724.     var AllowCollapse: Boolean) of object;
  725.   TTVExpandedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
  726.   TTVCompareEvent = procedure(Sender: TObject; Node1, Node2: TTreeNode;
  727.     Data: Integer; var Compare: Integer) of object;
  728.   TTVCustomDrawEvent = procedure(Sender: TCustomTreeView; const ARect: TRect;
  729.     var DefaultDraw: Boolean) of object;
  730.   TTVCustomDrawItemEvent = procedure(Sender: TCustomTreeView; Node: TTreeNode;
  731.     State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  732.   TTVAdvancedCustomDrawEvent = procedure(Sender: TCustomTreeView; const ARect: TRect;
  733.     Stage: TCustomDrawStage; var DefaultDraw: Boolean) of object;
  734.   TTVAdvancedCustomDrawItemEvent = procedure(Sender: TCustomTreeView; Node: TTreeNode;
  735.     State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages,
  736.     DefaultDraw: Boolean) of object;
  737.   TTVCreateNodeClassEvent = procedure(Sender: TCustomTreeView;
  738.     var NodeClass: TTreeNodeClass) of object;
  739.  
  740.   TCustomTreeView = class(TWinControl)
  741.   protected
  742.     FChangeTimer: TTimer;
  743.     function CanEdit(Node: TTreeNode): Boolean; dynamic;
  744.     function CanChange(Node: TTreeNode): Boolean; dynamic;
  745.     function CanCollapse(Node: TTreeNode): Boolean; dynamic;
  746.     function CanExpand(Node: TTreeNode): Boolean; dynamic;
  747.     procedure Change(Node: TTreeNode); dynamic;
  748.     procedure Collapse(Node: TTreeNode); dynamic;
  749.     function CreateNode: TTreeNode; virtual;
  750.     function CreateNodes: TTreeNodes; virtual;
  751.     procedure CreateParams(var Params: TCreateParams); override;
  752.     procedure CreateWnd; override;
  753.     function CustomDraw(const ARect: TRect; Stage: TCustomDrawStage): Boolean; virtual;
  754.     function CustomDrawItem(Node: TTreeNode; State: TCustomDrawState;
  755.       Stage: TCustomDrawStage; var PaintImages: Boolean): Boolean; virtual;
  756.     procedure Delete(Node: TTreeNode); dynamic;
  757.     procedure Added(Node: TTreeNode); dynamic;
  758.     procedure DestroyWnd; override;
  759.     procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
  760.     procedure DoStartDrag(var DragObject: TDragObject); override;
  761.     procedure Edit(const Item: TTVItem); dynamic;
  762.     procedure Expand(Node: TTreeNode); dynamic;
  763.     function GetDragImages: TDragImageList; override;
  764.     procedure GetImageIndex(Node: TTreeNode); virtual;
  765.     procedure GetSelectedIndex(Node: TTreeNode); virtual;
  766.     function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean; virtual;
  767.     procedure Loaded; override;
  768.     procedure Notification(AComponent: TComponent;
  769.       Operation: TOperation); override;
  770.     procedure SetDragMode(Value: TDragMode); override;
  771.     procedure WndProc(var Message: TMessage); override;
  772.     procedure ValidateSelection;
  773.     procedure InvalidateSelectionsRects;
  774.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  775.     procedure DoEnter; override;
  776.     procedure DoExit; override;
  777.     property AutoExpand: Boolean default False;
  778.     property BorderStyle: TBorderStyle default bsSingle;
  779.     property ChangeDelay: Integer default 0;
  780.     property CreateWndRestores: Boolean default True;
  781.     property HideSelection: Boolean default True;
  782.     property HotTrack: Boolean default False;
  783.     property Images: TCustomImageList;
  784.     property Indent: Integer;
  785.     property Items: TTreeNodes;
  786.     property MultiSelect: Boolean default False;
  787.     property MultiSelectStyle: TMultiSelectStyle default [msControlSelect];
  788.     property ReadOnly: Boolean default False;
  789.     property RightClickSelect: Boolean default False;
  790.     property RowSelect: Boolean default False;
  791.     property ShowButtons: Boolean default True;
  792.     property ShowLines: Boolean default True;
  793.     property ShowRoot: Boolean default True;
  794.     property SortType: TSortType default stNone;
  795.     property StateImages: TCustomImageList;
  796.     property ToolTips: Boolean default True;
  797.     property OnAddition: TTVExpandedEvent;
  798.     property OnAdvancedCustomDraw: TTVAdvancedCustomDrawEvent;
  799.     property OnAdvancedCustomDrawItem: TTVAdvancedCustomDrawItemEvent;
  800.     property OnCancelEdit: TTVChangedEvent;
  801.     property OnChange: TTVChangedEvent;
  802.     property OnChanging: TTVChangingEvent;
  803.     property OnCollapsed: TTVExpandedEvent;
  804.     property OnCollapsing: TTVCollapsingEvent;
  805.     property OnCompare: TTVCompareEvent;
  806.     property OnCustomDraw: TTVCustomDrawEvent;
  807.     property OnCustomDrawItem: TTVCustomDrawItemEvent;
  808.     property OnDeletion: TTVExpandedEvent;
  809.     property OnEditing: TTVEditingEvent;
  810.     property OnEdited: TTVEditedEvent;
  811.     property OnExpanding: TTVExpandingEvent;
  812.     property OnExpanded: TTVExpandedEvent;
  813.     property OnGetImageIndex: TTVExpandedEvent;
  814.     property OnGetSelectedIndex: TTVExpandedEvent;
  815.     property OnCreateNodeClass: TTVCreateNodeClassEvent;
  816.   public
  817.     constructor Create(AOwner: TComponent); override;
  818.     destructor Destroy; override;
  819.     function AlphaSort(ARecurse: Boolean = True): Boolean;
  820.     function CustomSort(SortProc: TTVCompare; Data: Longint; ARecurse: Boolean = True): Boolean;
  821.     procedure FullCollapse;
  822.     procedure FullExpand;
  823.     function GetHitTestInfoAt(X, Y: Integer): THitTests;
  824.     function GetNodeAt(X, Y: Integer): TTreeNode;
  825.     function IsEditing: Boolean;
  826.     procedure LoadFromFile(const FileName: string);
  827.     procedure LoadFromStream(Stream: TStream);
  828.     procedure SaveToFile(const FileName: string);
  829.     procedure SaveToStream(Stream: TStream);
  830.     property Canvas: TCanvas;
  831.     property DropTarget: TTreeNode;
  832.     property Selected: TTreeNode;
  833.     property TopItem: TTreeNode;
  834.  
  835.     procedure Select(Node: TTreeNode; ShiftState: TShiftState = []); overload; virtual;
  836.     procedure Select(const Nodes: array of TTreeNode); overload; virtual;
  837.     procedure Select(Nodes: TList); overload; virtual;
  838.     procedure Deselect(Node: TTreeNode); virtual;
  839.     procedure Subselect(Node: TTreeNode; Validate: Boolean = False); virtual;
  840.     property SelectionCount: Cardinal;
  841.     property Selections[Index: Integer]: TTreeNode;
  842.     procedure ClearSelection(KeepPrimary: Boolean = False); virtual;
  843.     function GetSelections(AList: TList): TTreeNode;
  844.     function FindNextToSelect: TTreeNode; virtual;
  845.   end;
  846.  
  847.   TTreeView = class(TCustomTreeView)
  848.   published
  849.     property Align;
  850.     property Anchors;
  851.     property AutoExpand;
  852.     property BevelEdges;
  853.     property BevelInner;
  854.     property BevelOuter;
  855.     property BevelKind default bkNone;
  856.     property BevelWidth;
  857.     property BiDiMode;
  858.     property BorderStyle;
  859.     property BorderWidth;
  860.     property ChangeDelay;
  861.     property Color;
  862.     property Ctl3D;
  863.     property Constraints;
  864.     property DragKind;
  865.     property DragCursor;
  866.     property DragMode;
  867.     property Enabled;
  868.     property Font;
  869.     property HideSelection;
  870.     property HotTrack;
  871.     property Images;
  872.     property Indent;
  873.     property MultiSelect;
  874.     property MultiSelectStyle;
  875.     property ParentBiDiMode;
  876.     property ParentColor default False;
  877.     property ParentCtl3D;
  878.     property ParentFont;
  879.     property ParentShowHint;
  880.     property PopupMenu;
  881.     property ReadOnly;
  882.     property RightClickSelect;
  883.     property RowSelect;
  884.     property ShowButtons;
  885.     property ShowHint;
  886.     property ShowLines;
  887.     property ShowRoot;
  888.     property SortType;
  889.     property StateImages;
  890.     property TabOrder;
  891.     property TabStop default True;
  892.     property ToolTips;
  893.     property Visible;
  894.     property OnAddition;
  895.     property OnAdvancedCustomDraw;
  896.     property OnAdvancedCustomDrawItem;
  897.     property OnChange;
  898.     property OnChanging;
  899.     property OnClick;
  900.     property OnCollapsed;
  901.     property OnCollapsing;
  902.     property OnCompare;
  903.     property OnContextPopup;
  904.     property OnCreateNodeClass;
  905.     property OnCustomDraw;
  906.     property OnCustomDrawItem;
  907.     property OnDblClick;
  908.     property OnDeletion;
  909.     property OnDragDrop;
  910.     property OnDragOver;
  911.     property OnEdited;
  912.     property OnEditing;
  913.     property OnEndDock;
  914.     property OnEndDrag;
  915.     property OnEnter;
  916.     property OnExit;
  917.     property OnExpanding;
  918.     property OnExpanded;
  919.     property OnGetImageIndex;
  920.     property OnGetSelectedIndex;
  921.     property OnKeyDown;
  922.     property OnKeyPress;
  923.     property OnKeyUp;
  924.     property OnMouseDown;
  925.     property OnMouseMove;
  926.     property OnMouseUp;
  927.     property OnStartDock;
  928.     property OnStartDrag;
  929.     { Items must be published after OnGetImageIndex and OnGetSelectedIndex }
  930.     property Items;
  931.   end;
  932.  
  933. { TTrackBar }
  934.  
  935.   TTrackBarOrientation = (trHorizontal, trVertical);
  936.   TTickMark = (tmBottomRight, tmTopLeft, tmBoth);
  937.   TTickStyle = (tsNone, tsAuto, tsManual);
  938.  
  939.   TTrackBar = class(TWinControl)
  940.   protected
  941.     procedure CreateParams(var Params: TCreateParams); override;
  942.     procedure CreateWnd; override;
  943.     procedure DestroyWnd; override;
  944.     procedure Changed; dynamic;
  945.   public
  946.     constructor Create(AOwner: TComponent); override;
  947.     procedure SetTick(Value: Integer);
  948.   published
  949.     property Align;
  950.     property Anchors;
  951.     property BorderWidth;
  952.     property Ctl3D;
  953.     property DragCursor;
  954.     property DragKind;
  955.     property DragMode;
  956.     property Enabled;
  957.     property Constraints;
  958.     property LineSize: Integer default 1;
  959.     property Max: Integer default 10;
  960.     property Min: Integer default 0;
  961.     property Orientation: TTrackBarOrientation;
  962.     property ParentCtl3D;
  963.     property ParentShowHint;
  964.     property PageSize: Integer default 2;
  965.     property PopupMenu;
  966.     property Frequency: Integer;
  967.     property Position: Integer;
  968.     property SliderVisible: Boolean default True;
  969.     property SelEnd: Integer;
  970.     property SelStart: Integer;
  971.     property ShowHint;
  972.     property TabOrder;
  973.     property TabStop default True;
  974.     property ThumbLength: Integer default 20;
  975.     property TickMarks: TTickMark;
  976.     property TickStyle: TTickStyle;
  977.     property Visible;
  978.     property OnContextPopup;
  979.     property OnChange: TNotifyEvent;
  980.     property OnDragDrop;
  981.     property OnDragOver;
  982.     property OnEndDock;
  983.     property OnEndDrag;
  984.     property OnEnter;
  985.     property OnExit;
  986.     property OnKeyDown;
  987.     property OnKeyPress;
  988.     property OnKeyUp;
  989.     property OnStartDock;
  990.     property OnStartDrag;
  991.   end;
  992.  
  993. { TProgressBar }
  994.  
  995.   TProgressRange = Integer; // for backward compatibility
  996.  
  997.   TProgressBarOrientation = (pbHorizontal, pbVertical);
  998.  
  999.   TProgressBar = class(TWinControl)
  1000.   protected
  1001.     procedure CreateParams(var Params: TCreateParams); override;
  1002.     procedure CreateWnd; override;
  1003.     procedure DestroyWnd; override;
  1004.   public
  1005.     constructor Create(AOwner: TComponent); override;
  1006.     procedure StepIt;
  1007.     procedure StepBy(Delta: Integer);
  1008.   published
  1009.     property Align;
  1010.     property Anchors;
  1011.     property BorderWidth;
  1012.     property DragCursor;
  1013.     property DragKind;
  1014.     property DragMode;
  1015.     property Enabled;
  1016.     property Hint;
  1017.     property Constraints;
  1018.     property Min: Integer;
  1019.     property Max: Integer;
  1020.     property Orientation: TProgressBarOrientation default pbHorizontal;
  1021.     property ParentShowHint;
  1022.     property PopupMenu;
  1023.     property Position: Integer default 0;
  1024.     property Smooth: Boolean default False;
  1025.     property Step: Integer default 10;
  1026.     property ShowHint;
  1027.     property TabOrder;
  1028.     property TabStop;
  1029.     property Visible;
  1030.     property OnContextPopup;
  1031.     property OnDragDrop;
  1032.     property OnDragOver;
  1033.     property OnEndDock;
  1034.     property OnEndDrag;
  1035.     property OnEnter;
  1036.     property OnExit;
  1037.     property OnMouseDown;
  1038.     property OnMouseMove;
  1039.     property OnMouseUp;
  1040.     property OnStartDock;
  1041.     property OnStartDrag;
  1042.   end;
  1043.  
  1044. { TTextAttributes }
  1045.  
  1046.   TCustomRichEdit = class;
  1047.  
  1048.   TAttributeType = (atSelected, atDefaultText);
  1049.   TConsistentAttribute = (caBold, caColor, caFace, caItalic,
  1050.     caSize, caStrikeOut, caUnderline, caProtected);
  1051.   TConsistentAttributes = set of TConsistentAttribute;
  1052.  
  1053.   TTextAttributes = class(TPersistent)
  1054.   protected
  1055.     procedure InitFormat(var Format: TCharFormat);
  1056.     procedure AssignTo(Dest: TPersistent); override;
  1057.   public
  1058.     constructor Create(AOwner: TCustomRichEdit; AttributeType: TAttributeType);
  1059.     procedure Assign(Source: TPersistent); override;
  1060.     property Charset: TFontCharset;
  1061.     property Color: TColor;
  1062.     property ConsistentAttributes: TConsistentAttributes;
  1063.     property Name: TFontName;
  1064.     property Pitch: TFontPitch;
  1065.     property Protected: Boolean;
  1066.     property Size: Integer;
  1067.     property Style: TFontStyles;
  1068.     property Height: Integer;
  1069.   end;
  1070.  
  1071. { TParaAttributes }
  1072.  
  1073.   TNumberingStyle = (nsNone, nsBullet);
  1074.  
  1075.   TParaAttributes = class(TPersistent)
  1076.   public
  1077.     constructor Create(AOwner: TCustomRichEdit);
  1078.     procedure Assign(Source: TPersistent); override;
  1079.     property Alignment: TAlignment;
  1080.     property FirstIndent: Longint;
  1081.     property LeftIndent: Longint;
  1082.     property Numbering: TNumberingStyle;
  1083.     property RightIndent: Longint;
  1084.     property Tab[Index: Byte]: Longint;
  1085.     property TabCount: Integer;
  1086.   end;
  1087.  
  1088. { TCustomRichEdit }
  1089.  
  1090.   TRichEditResizeEvent = procedure(Sender: TObject; Rect: TRect) of object;
  1091.   TRichEditProtectChange = procedure(Sender: TObject;
  1092.     StartPos, EndPos: Integer; var AllowChange: Boolean) of object;
  1093.   TRichEditSaveClipboard = procedure(Sender: TObject;
  1094.     NumObjects, NumChars: Integer; var SaveClipboard: Boolean) of object;
  1095.   TSearchType = (stWholeWord, stMatchCase);
  1096.   TSearchTypes = set of TSearchType;
  1097.  
  1098.   TConversion = class(TObject)
  1099.   public
  1100.     function ConvertReadStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; virtual;
  1101.     function ConvertWriteStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; virtual;
  1102.   end;
  1103.  
  1104.   TConversionClass = class of TConversion;
  1105.  
  1106.   PConversionFormat = ^TConversionFormat;
  1107.   TConversionFormat = record
  1108.     ConversionClass: TConversionClass;
  1109.     Extension: string;
  1110.     Next: PConversionFormat;
  1111.   end;
  1112.  
  1113.   PRichEditStreamInfo = ^TRichEditStreamInfo;
  1114.   TRichEditStreamInfo = record
  1115.     Converter: TConversion;
  1116.     Stream: TStream;
  1117.   end;
  1118.  
  1119.   TCustomRichEdit = class(TCustomMemo)
  1120.   protected
  1121.     procedure CreateParams(var Params: TCreateParams); override;
  1122.     procedure CreateWnd; override;
  1123.     procedure DestroyWnd; override;
  1124.     procedure RequestSize(const Rect: TRect); virtual;
  1125.     procedure SelectionChange; dynamic;
  1126.     procedure DoSetMaxLength(Value: Integer); override;
  1127.     function GetCaretPos: TPoint; override;
  1128.     procedure SetCaretPos(const Value: TPoint); override;    
  1129.     function GetSelLength: Integer; override;
  1130.     function GetSelStart: Integer; override;
  1131.     function GetSelText: string; override;
  1132.     procedure SetSelLength(Value: Integer); override;
  1133.     procedure SetSelStart(Value: Integer); override;
  1134.     property HideSelection: Boolean default True;
  1135.     property HideScrollBars: Boolean default True;
  1136.     property Lines: TStrings;
  1137.     property OnSaveClipboard: TRichEditSaveClipboard;
  1138.     property OnSelectionChange: TNotifyEvent;
  1139.     property OnProtectChange: TRichEditProtectChange;
  1140.     property OnResizeRequest: TRichEditResizeEvent;
  1141.     property PlainText: Boolean default False;
  1142.   public
  1143.     constructor Create(AOwner: TComponent); override;
  1144.     destructor Destroy; override;
  1145.     procedure Clear; override;
  1146.     function FindText(const SearchStr: string;
  1147.       StartPos, Length: Integer; Options: TSearchTypes): Integer;
  1148.     function GetSelTextBuf(Buffer: PChar; BufSize: Integer): Integer; override;
  1149.     procedure Print(const Caption: string); virtual;
  1150.     class procedure RegisterConversionFormat(const AExtension: string;
  1151.       AConversionClass: TConversionClass);
  1152.     property DefaultConverter: TConversionClass;
  1153.     property DefAttributes: TTextAttributes;
  1154.     property SelAttributes: TTextAttributes;
  1155.     property PageRect: TRect;
  1156.     property Paragraph: TParaAttributes;
  1157.   end;
  1158.  
  1159.   TRichEdit = class(TCustomRichEdit)
  1160.   published
  1161.     property Align;
  1162.     property Alignment;
  1163.     property Anchors;
  1164.     property BevelEdges;
  1165.     property BevelInner;
  1166.     property BevelOuter;
  1167.     property BevelKind default bkNone;
  1168.     property BevelWidth;
  1169.     property BiDiMode;
  1170.     property BorderStyle;
  1171.     property BorderWidth;
  1172.     property Color;
  1173.     property Ctl3D;
  1174.     property DragCursor;
  1175.     property DragKind;
  1176.     property DragMode;
  1177.     property Enabled;
  1178.     property Font;
  1179.     property HideSelection;
  1180.     property HideScrollBars;
  1181.     property ImeMode;
  1182.     property ImeName;
  1183.     property Constraints;
  1184.     property Lines;
  1185.     property MaxLength;
  1186.     property ParentBiDiMode;
  1187.     property ParentColor;
  1188.     property ParentCtl3D;
  1189.     property ParentFont;
  1190.     property ParentShowHint;
  1191.     property PlainText;
  1192.     property PopupMenu;
  1193.     property ReadOnly;
  1194.     property ScrollBars;
  1195.     property ShowHint;
  1196.     property TabOrder;
  1197.     property TabStop default True;
  1198.     property Visible;
  1199.     property WantTabs;
  1200.     property WantReturns;
  1201.     property WordWrap;
  1202.     property OnChange;
  1203.     property OnContextPopup;
  1204.     property OnDragDrop;
  1205.     property OnDragOver;
  1206.     property OnEndDock;
  1207.     property OnEndDrag;
  1208.     property OnEnter;
  1209.     property OnExit;
  1210.     property OnKeyDown;
  1211.     property OnKeyPress;
  1212.     property OnKeyUp;
  1213.     property OnMouseDown;
  1214.     property OnMouseMove;
  1215.     property OnMouseUp;
  1216.     property OnMouseWheel;
  1217.     property OnMouseWheelDown;
  1218.     property OnMouseWheelUp;
  1219.     property OnProtectChange;
  1220.     property OnResizeRequest;
  1221.     property OnSaveClipboard;
  1222.     property OnSelectionChange;
  1223.     property OnStartDock;
  1224.     property OnStartDrag;
  1225.   end;
  1226.  
  1227. { TUpDown }
  1228.  
  1229.   TUDAlignButton = (udLeft, udRight);
  1230.   TUDOrientation = (udHorizontal, udVertical);
  1231.   TUDBtnType = (btNext, btPrev);
  1232.   TUpDownDirection = (updNone, updUp, updDown);
  1233.   TUDClickEvent = procedure (Sender: TObject; Button: TUDBtnType) of object;
  1234.   TUDChangingEvent = procedure (Sender: TObject; var AllowChange: Boolean) of object;
  1235.   TUDChangingEventEx = procedure (Sender: TObject; var AllowChange: Boolean; NewValue: SmallInt; Direction: TUpDownDirection) of object;
  1236.  
  1237.   TCustomUpDown = class(TWinControl)
  1238.   protected
  1239.     function DoCanChange(NewVal: SmallInt; Delta: SmallInt): Boolean;
  1240.     function CanChange: Boolean; dynamic;
  1241.     procedure CreateParams(var Params: TCreateParams); override;
  1242.     procedure CreateWnd; override;
  1243.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1244.     procedure Click(Button: TUDBtnType); reintroduce; dynamic;
  1245.     property AlignButton: TUDAlignButton default udRight;
  1246.     property ArrowKeys: Boolean default True;
  1247.     property Associate: TWinControl;
  1248.     property Min: SmallInt;
  1249.     property Max: SmallInt default 100;
  1250.     property Increment: Integer default 1;
  1251.     property Orientation: TUDOrientation default udVertical;
  1252.     property Position: SmallInt;
  1253.     property Thousands: Boolean default True;
  1254.     property Wrap: Boolean;
  1255.     property OnChanging: TUDChangingEvent;
  1256.     property OnChangingEx: TUDChangingEventEx;    
  1257.     property OnClick: TUDClickEvent;
  1258.   public
  1259.     constructor Create(AOwner: TComponent); override;
  1260.   end;
  1261.  
  1262.   TUpDown = class(TCustomUpDown)
  1263.   published
  1264.     property AlignButton;
  1265.     property Anchors;
  1266.     property Associate;
  1267.     property ArrowKeys;
  1268.     property Enabled;
  1269.     property Hint;
  1270.     property Min;
  1271.     property Max;
  1272.     property Increment;
  1273.     property Constraints;
  1274.     property Orientation;
  1275.     property ParentShowHint;
  1276.     property PopupMenu;
  1277.     property Position;
  1278.     property ShowHint;
  1279.     property TabOrder;
  1280.     property TabStop;
  1281.     property Thousands;
  1282.     property Visible;
  1283.     property Wrap;
  1284.     property OnChanging;
  1285.     property OnChangingEx;
  1286.     property OnContextPopup;
  1287.     property OnClick;
  1288.     property OnEnter;
  1289.     property OnExit;
  1290.     property OnMouseDown;
  1291.     property OnMouseMove;
  1292.     property OnMouseUp;
  1293.   end;
  1294.  
  1295. { THotKey }
  1296.  
  1297.   THKModifier = (hkShift, hkCtrl, hkAlt, hkExt);
  1298.   THKModifiers = set of THKModifier;
  1299.   THKInvalidKey = (hcNone, hcShift, hcCtrl, hcAlt, hcShiftCtrl,
  1300.     hcShiftAlt, hcCtrlAlt, hcShiftCtrlAlt);
  1301.   THKInvalidKeys = set of THKInvalidKey;
  1302.  
  1303.   TCustomHotKey = class(TWinControl)
  1304.   protected
  1305.     procedure CreateParams(var Params: TCreateParams); override;
  1306.     procedure CreateWnd; override;
  1307.     procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
  1308.     procedure SetAutoSize(Value: Boolean); override;    
  1309.     property AutoSize: Boolean default True;
  1310.     property InvalidKeys: THKInvalidKeys;
  1311.     property Modifiers: THKModifiers;
  1312.     property HotKey: TShortCut;
  1313.     property TabStop default True;
  1314.     property OnChange: TNotifyEvent;
  1315.   public
  1316.     constructor Create(AOwner: TComponent); override;
  1317.   end;
  1318.  
  1319.   THotKey = class(TCustomHotKey)
  1320.   published
  1321.     property Anchors;
  1322.     property AutoSize;
  1323.     property BiDiMode;
  1324.     property Constraints;
  1325.     property Enabled;
  1326.     property Hint;
  1327.     property HotKey;
  1328.     property InvalidKeys;
  1329.     property Modifiers;
  1330.     property ParentBiDiMode;
  1331.     property ParentShowHint;
  1332.     property PopupMenu;
  1333.     property ShowHint;
  1334.     property TabOrder;
  1335.     property TabStop;
  1336.     property Visible;
  1337.     property OnChange;
  1338.     property OnContextPopup;
  1339.     property OnEnter;
  1340.     property OnExit;
  1341.     property OnMouseDown;
  1342.     property OnMouseMove;
  1343.     property OnMouseUp;
  1344.   end;
  1345.  
  1346. const
  1347.   ColumnHeaderWidth = LVSCW_AUTOSIZE_USEHEADER;
  1348.   ColumnTextWidth = LVSCW_AUTOSIZE;
  1349.  
  1350. type
  1351.   TListColumns = class;
  1352.   TListItems = class;
  1353.   TCustomListView = class;
  1354.   TWidth = ColumnHeaderWidth..MaxInt;
  1355.  
  1356.   TListColumn = class(TCollectionItem)
  1357.   protected
  1358.     procedure DefineProperties(Filer: TFiler); override;
  1359.     function GetDisplayName: string; override;
  1360.     procedure SetIndex(Value: Integer); override;
  1361.   public
  1362.     constructor Create(Collection: TCollection); override;
  1363.     destructor Destroy; override;
  1364.     procedure Assign(Source: TPersistent); override;
  1365.     property WidthType: TWidth;
  1366.   published
  1367.     property Alignment: TAlignment default taLeftJustify;
  1368.     property AutoSize: Boolean default False;
  1369.     property Caption: string;
  1370.     property ImageIndex: TImageIndex default -1;
  1371.     property MaxWidth: TWidth default 0;
  1372.     property MinWidth: TWidth default 0;
  1373.     property Tag: Integer default 0;
  1374.     property Width: TWidth default 50;
  1375.   end;
  1376.  
  1377.   TListColumns = class(TCollection)
  1378.   protected
  1379.     function GetOwner: TPersistent; override;
  1380.     procedure Update(Item: TCollectionItem); override;
  1381.   public
  1382.     constructor Create(AOwner: TCustomListView);
  1383.     function Add: TListColumn;
  1384.     function Owner: TCustomListView;
  1385.     property Items[Index: Integer]: TListColumn; default;
  1386.   end;
  1387.  
  1388.   TDisplayCode = (drBounds, drIcon, drLabel, drSelectBounds);
  1389.  
  1390.   { TListItem }
  1391.  
  1392.   TListItemClass = class of TListItem;
  1393.   TListItem = class(TPersistent)
  1394.   public
  1395.     constructor Create(AOwner: TListItems);
  1396.     destructor Destroy; override;
  1397.     procedure Assign(Source: TPersistent); override;
  1398.     procedure CancelEdit;
  1399.     procedure Delete;
  1400.     function DisplayRect(Code: TDisplayCode): TRect;
  1401.     function EditCaption: Boolean;
  1402.     function GetPosition: TPoint;
  1403.     procedure MakeVisible(PartialOK: Boolean);
  1404.     procedure Update;
  1405.     procedure SetPosition(const Value: TPoint);
  1406.     function WorkArea: Integer;
  1407.     property Caption: string;
  1408.     property Checked: Boolean;
  1409.     property Cut: Boolean index 0;
  1410.     property Data: Pointer;
  1411.     property Deleting: Boolean;
  1412.     property DropTarget: Boolean index 1;
  1413.     property Focused: Boolean index 2;
  1414.     property Handle: HWND;
  1415.     property ImageIndex: TImageIndex index 0;
  1416.     property Indent: Integer default 0;
  1417.     property Index: Integer;
  1418.     property Left: Integer;
  1419.     property ListView: TCustomListView;
  1420.     property Owner: TListItems;
  1421.     property OverlayIndex: TImageIndex index 1;
  1422.     property Position: TPoint;
  1423.     property Selected: Boolean index 3;
  1424.     property StateIndex: TImageIndex index 2;
  1425.     property SubItems: TStrings;
  1426.     property SubItemImages[Index: Integer]: Integer;
  1427.     property Top: Integer;
  1428.   end;
  1429.  
  1430. { TListItems }
  1431.  
  1432.   TListItems = class(TPersistent)
  1433.   protected
  1434.     procedure DefineProperties(Filer: TFiler); override;
  1435.     function CreateItem(Index: Integer; ListItem: TListItem): TLVItem;
  1436.     function GetCount: Integer;
  1437.     function GetHandle: HWND;
  1438.     function GetItem(Index: Integer): TListItem;
  1439.     procedure SetCount(Value: Integer);
  1440.     procedure SetItem(Index: Integer; Value: TListItem);
  1441.     procedure SetUpdateState(Updating: Boolean);
  1442.   public
  1443.     constructor Create(AOwner: TCustomListView);
  1444.     destructor Destroy; override;
  1445.     function Add: TListItem;
  1446.     function AddItem(Item: TListItem; Index: Integer = -1): TListItem;
  1447.     procedure Assign(Source: TPersistent); override;
  1448.     procedure BeginUpdate;
  1449.     procedure Clear;
  1450.     procedure Delete(Index: Integer);
  1451.     procedure EndUpdate;
  1452.     function IndexOf(Value: TListItem): Integer;
  1453.     function Insert(Index: Integer): TListItem;
  1454.     property Count: Integer;
  1455.     property Handle: HWND;
  1456.     property Item[Index: Integer]: TListItem; default;
  1457.     property Owner: TCustomListView;
  1458.   end;
  1459.  
  1460. { TWorkArea }
  1461.  
  1462.   TWorkArea = class(TCollectionItem)
  1463.   public
  1464.     constructor Create(Collection: TCollection); override;
  1465.     procedure SetDisplayName(const Value: string); override;
  1466.     function  GetDisplayName: string; override;
  1467.     property Rect: TRect;
  1468.     property Color: TColor;
  1469.   end;
  1470.  
  1471. { TWorkAreas }
  1472.  
  1473.   TWorkAreas = class(TOwnedCollection)
  1474.   protected
  1475.     procedure Changed;
  1476.     procedure Update(Item: TCollectionItem); override;
  1477.   public
  1478.     function  Add: TWorkArea;
  1479.     procedure Delete(Index: Integer);
  1480.     function  Insert(Index: Integer): TWorkArea;
  1481.     property  Items[Index: Integer]: TWorkArea; default;
  1482.   end;
  1483.  
  1484. { TIconOptions }
  1485.  
  1486.   TIconArrangement = (iaTop, iaLeft);
  1487.  
  1488.   TIconOptions = class(TPersistent)
  1489.   public
  1490.     constructor Create(AOwner: TCustomListView);
  1491.   published
  1492.     property Arrangement: TIconArrangement default iaTop;
  1493.     property AutoArrange: Boolean default False;
  1494.     property WrapText: Boolean default True;
  1495.   end;
  1496.  
  1497.   TOwnerDrawState = Windows.TOwnerDrawState;
  1498.  
  1499.   (*$NODEFINE TOwnerDrawState*)
  1500.  
  1501.   TListArrangement = (arAlignBottom, arAlignLeft, arAlignRight,
  1502.     arAlignTop, arDefault, arSnapToGrid);
  1503.   TViewStyle = (vsIcon, vsSmallIcon, vsList, vsReport);
  1504.   TItemState = (isNone, isCut, isDropHilited, isFocused, isSelected, isActivating);
  1505.   TItemStates = set of TItemState;
  1506.   TItemChange = (ctText, ctImage, ctState);
  1507.   TItemFind = (ifData, ifPartialString, ifExactString, ifNearest);
  1508.   TSearchDirection = (sdLeft, sdRight, sdAbove, sdBelow, sdAll);
  1509.   TListHotTrackStyle = (htHandPoint, htUnderlineCold, htUnderlineHot);
  1510.   TListHotTrackStyles = set of TListHotTrackStyle;
  1511.   TItemRequests = (irText, irImage, irParam, irState, irIndent);
  1512.   TItemRequest = set of TItemRequests;
  1513.  
  1514.   TLVDeletedEvent = procedure(Sender: TObject; Item: TListItem) of object;
  1515.   TLVEditingEvent = procedure(Sender: TObject; Item: TListItem;
  1516.     var AllowEdit: Boolean) of object;
  1517.   TLVEditedEvent = procedure(Sender: TObject; Item: TListItem; var S: string) of object;
  1518.   TLVChangeEvent = procedure(Sender: TObject; Item: TListItem;
  1519.     Change: TItemChange) of object;
  1520.   TLVChangingEvent = procedure(Sender: TObject; Item: TListItem;
  1521.     Change: TItemChange; var AllowChange: Boolean) of object;
  1522.   TLVColumnClickEvent = procedure(Sender: TObject; Column: TListColumn) of object;
  1523.   TLVColumnRClickEvent = procedure(Sender: TObject; Column: TListColumn;
  1524.     Point: TPoint) of object;
  1525.   TLVCompareEvent = procedure(Sender: TObject; Item1, Item2: TListItem;
  1526.     Data: Integer; var Compare: Integer) of object;
  1527.   TLVNotifyEvent = procedure(Sender: TObject; Item: TListItem) of object;
  1528.   TLVSelectItemEvent = procedure(Sender: TObject; Item: TListItem;
  1529.     Selected: Boolean) of object;
  1530.   TLVDrawItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1531.     Rect: TRect; State: TOwnerDrawState) of object;
  1532.   TLVCustomDrawEvent = procedure(Sender: TCustomListView; const ARect: TRect;
  1533.     var DefaultDraw: Boolean) of object;
  1534.   TLVCustomDrawItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1535.     State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  1536.   TLVCustomDrawSubItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1537.     SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  1538.   TLVAdvancedCustomDrawEvent = procedure(Sender: TCustomListView; const ARect: TRect;
  1539.     Stage: TCustomDrawStage; var DefaultDraw: Boolean) of object;
  1540.   TLVAdvancedCustomDrawItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1541.     State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean) of object;
  1542.   TLVAdvancedCustomDrawSubItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1543.     SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage;
  1544.     var DefaultDraw: Boolean) of object;
  1545.   TLVOwnerDataEvent = procedure(Sender: TObject; Item: TListItem) of object;
  1546.   TLVOwnerDataFindEvent = procedure(Sender: TObject; Find: TItemFind;
  1547.     const FindString: string; const FindPosition: TPoint; FindData: Pointer;
  1548.     StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean;
  1549.     var Index: Integer) of object;
  1550.   TLVOwnerDataHintEvent = procedure(Sender: TObject; StartIndex, EndIndex: Integer) of object;
  1551.   TLVOwnerDataStateChangeEvent = procedure(Sender: TObject; StartIndex,
  1552.     EndIndex: Integer; OldState, NewState: TItemStates) of object;
  1553.   TLVSubItemImageEvent = procedure(Sender: TObject; Item: TListItem; SubItem: Integer;
  1554.     var ImageIndex: Integer) of object;
  1555.   TLVInfoTipEvent = procedure(Sender: TObject; Item: TListItem; var InfoTip: string) of object;
  1556.   TLVCreateItemClassEvent = procedure(Sender: TCustomListView; var ItemClass: TListItemClass) of object;
  1557.  
  1558. { TCustomListView }
  1559.  
  1560.   TCustomListView = class(TCustomMultiSelectListControl)
  1561.   protected
  1562.     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  1563.     function CanChange(Item: TListItem; Change: Integer): Boolean; dynamic;
  1564.     function CanEdit(Item: TListItem): Boolean; dynamic;
  1565.     procedure Change(Item: TListItem; Change: Integer); dynamic;
  1566.     procedure ChangeScale(M, D: Integer); override;
  1567.     procedure ColClick(Column: TListColumn); dynamic;
  1568.     procedure ColRightClick(Column: TListColumn; Point: TPoint); dynamic;
  1569.     function ColumnsShowing: Boolean;
  1570.     function CreateListItem: TListItem; virtual;
  1571.     function CreateListItems: TListItems; virtual;
  1572.     procedure CreateParams(var Params: TCreateParams); override;
  1573.     procedure CreateWnd; override;
  1574.     function CustomDraw(const ARect: TRect; Stage: TCustomDrawStage): Boolean; virtual;
  1575.     function CustomDrawItem(Item: TListItem; State: TCustomDrawState;
  1576.       Stage: TCustomDrawStage): Boolean; virtual;
  1577.     function CustomDrawSubItem(Item: TListItem; SubItem: Integer;
  1578.       State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; virtual;
  1579.     procedure Delete(Item: TListItem); dynamic;
  1580.     procedure DestroyWnd; override;
  1581.     procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
  1582.     procedure DoStartDrag(var DragObject: TDragObject); override;
  1583.     procedure DoInfoTip(Item: TListItem; var InfoTip: string); virtual;
  1584.     procedure DrawItem(Item: TListItem; Rect: TRect; State: TOwnerDrawState); virtual;
  1585.     procedure Edit(const Item: TLVItem); dynamic;
  1586.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  1587.     function OwnerDataFetch(Item: TListItem; Request: TItemRequest): Boolean; virtual;
  1588.     function OwnerDataFind(Find: TItemFind; const FindString: string;
  1589.       const FindPosition: TPoint; FindData: Pointer; StartIndex: Integer;
  1590.       Direction: TSearchDirection; Wrap: Boolean): Integer; virtual;
  1591.     function OwnerDataHint(StartIndex, EndIndex: Integer): Boolean; virtual;
  1592.     function OwnerDataStateChange(StartIndex, EndIndex: Integer; OldState,
  1593.       NewState: TItemStates): Boolean; virtual;
  1594.     function GetActionLinkClass: TControlActionLinkClass; override;
  1595.     function GetCount: Integer; override;
  1596.     function GetDragImages: TDragImageList; override;
  1597.     function GetItemIndex(Value: TListItem): Integer; reintroduce; overload;
  1598.     function GetItemIndex: Integer; reintroduce; overload; override;
  1599.     function GetSelCount: Integer; override;
  1600.     procedure InsertItem(Item: TListItem); dynamic;
  1601.     function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean; virtual;
  1602.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1603.     procedure SetItemIndex(const Value: Integer); override;
  1604.     procedure SetMultiSelect(Value: Boolean); override;
  1605.     procedure SetViewStyle(Value: TViewStyle); virtual;
  1606.     procedure UpdateColumn(AnIndex: Integer);
  1607.     procedure UpdateColumns;
  1608.     procedure WndProc(var Message: TMessage); override;
  1609.     property BorderStyle: TBorderStyle default bsSingle;
  1610.     property Columns: TListColumns;
  1611.     property ColumnClick: Boolean default True;
  1612.     property ReadOnly: Boolean;
  1613.     property HideSelection: Boolean default True;
  1614.     property IconOptions: TIconOptions;
  1615.     property Items: TListItems;
  1616.     property AllocBy: Integer default 0;
  1617.     property HoverTime: Integer default -1;
  1618.     property LargeImages: TCustomImageList;
  1619.     property MultiSelect: Boolean default False;
  1620.     property OwnerData: Boolean default False;
  1621.     property OwnerDraw: Boolean default False;
  1622.     property OnAdvancedCustomDraw: TLVAdvancedCustomDrawEvent;
  1623.     property OnAdvancedCustomDrawItem: TLVAdvancedCustomDrawItemEvent;
  1624.     property OnAdvancedCustomDrawSubItem: TLVAdvancedCustomDrawSubItemEvent;
  1625.     property OnChange: TLVChangeEvent;
  1626.     property OnChanging: TLVChangingEvent;
  1627.     property OnColumnClick: TLVColumnClickEvent;
  1628.     property OnColumnDragged: TNotifyEvent;
  1629.     property OnColumnRightClick: TLVColumnRClickEvent;
  1630.     property OnCompare: TLVCompareEvent;
  1631.     property OnCustomDraw: TLVCustomDrawEvent;
  1632.     property OnCustomDrawItem: TLVCustomDrawItemEvent;
  1633.     property OnCustomDrawSubItem: TLVCustomDrawSubItemEvent;
  1634.     property OnData: TLVOwnerDataEvent;
  1635.     property OnDataFind: TLVOwnerDataFindEvent;
  1636.     property OnDataHint: TLVOwnerDataHintEvent;
  1637.     property OnDataStateChange: TLVOwnerDataStateChangeEvent;
  1638.     property OnDeletion: TLVDeletedEvent;
  1639.     property OnDrawItem: TLVDrawItemEvent;
  1640.     property OnEdited: TLVEditedEvent;
  1641.     property OnEditing: TLVEditingEvent;
  1642.     property OnInfoTip: TLVInfoTipEvent;
  1643.     property OnInsert: TLVDeletedEvent;
  1644.     property OnGetImageIndex: TLVNotifyEvent;
  1645.     property OnGetSubItemImage: TLVSubItemImageEvent;
  1646.     property OnSelectItem: TLVSelectItemEvent;
  1647.     property ShowColumnHeaders: Boolean default True;
  1648.     property ShowWorkAreas: Boolean default False;
  1649.     property SmallImages: TCustomImageList;
  1650.     property SortType: TSortType default stNone;
  1651.     property StateImages: TCustomImageList;
  1652.     property ViewStyle: TViewStyle default vsIcon;
  1653.     property OnCreateItemClass: TLVCreateItemClassEvent;
  1654.   public
  1655.     constructor Create(AOwner: TComponent); override;
  1656.     destructor Destroy; override;
  1657.     procedure AddItem(Item: String; AObject: TObject); override;
  1658.     function AlphaSort: Boolean;
  1659.     procedure Arrange(Code: TListArrangement);
  1660.     procedure Clear; override;
  1661.     procedure ClearSelection; override;
  1662.     procedure CopySelection(Destination: TCustomListControl); override;
  1663.     procedure DeleteSelected; override;
  1664.     function FindCaption(StartIndex: Integer; Value: string;
  1665.       Partial, Inclusive, Wrap: Boolean): TListItem;
  1666.     function FindData(StartIndex: Integer; Value: Pointer;
  1667.       Inclusive, Wrap: Boolean): TListItem;
  1668.     function GetHitTestInfoAt(X, Y: Integer): THitTests;
  1669.     function GetItemAt(X, Y: Integer): TListItem;
  1670.     function GetNearestItem(Point: TPoint;
  1671.       Direction: TSearchDirection): TListItem;
  1672.     function GetNextItem(StartItem: TListItem;
  1673.       Direction: TSearchDirection; States: TItemStates): TListItem;
  1674.     function GetSearchString: string;
  1675.     function IsEditing: Boolean;
  1676.     procedure SelectAll; override;
  1677.     procedure Scroll(DX, DY: Integer);
  1678.     property Canvas: TCanvas;
  1679.     property Checkboxes: Boolean default False;
  1680.     property Column[Index: Integer]: TListColumn;
  1681.     property DropTarget: TListItem;
  1682.     property FlatScrollBars: Boolean default False;
  1683.     property FullDrag: Boolean default False;
  1684.     property GridLines: Boolean default False;
  1685.     property HotTrack: Boolean default False;
  1686.     property HotTrackStyles: TListHotTrackStyles default [];
  1687.     property ItemFocused: TListItem;
  1688.     property RowSelect: Boolean default False;
  1689.     property SelCount: Integer;
  1690.     property Selected: TListItem;
  1691.     function CustomSort(SortProc: TLVCompare; lParam: Longint): Boolean;
  1692.     function StringWidth(S: string): Integer;
  1693.     procedure UpdateItems(FirstIndex, LastIndex: Integer);
  1694.     property TopItem: TListItem;
  1695.     property ViewOrigin: TPoint;
  1696.     property VisibleRowCount: Integer;
  1697.     property BoundingRect: TRect;
  1698.     property WorkAreas: TWorkAreas;
  1699.   end;
  1700.  
  1701. { TListView }
  1702.  
  1703.   TListView = class(TCustomListView)
  1704.   published
  1705.     property Action;
  1706.     property Align;
  1707.     property AllocBy;
  1708.     property Anchors;
  1709.     property BevelEdges;
  1710.     property BevelInner;
  1711.     property BevelOuter;
  1712.     property BevelKind default bkNone;
  1713.     property BevelWidth;
  1714.     property BiDiMode;
  1715.     property BorderStyle;
  1716.     property BorderWidth;
  1717.     property Checkboxes;
  1718.     property Color;
  1719.     property Columns;
  1720.     property ColumnClick;
  1721.     property Constraints;
  1722.     property Ctl3D;
  1723.     property DragCursor;
  1724.     property DragKind;
  1725.     property DragMode;
  1726.     property Enabled;
  1727.     property Font;
  1728.     property FlatScrollBars;
  1729.     property FullDrag;
  1730.     property GridLines;
  1731.     property HideSelection;
  1732.     property HotTrack;
  1733.     property HotTrackStyles;
  1734.     property HoverTime;
  1735.     property IconOptions;
  1736.     property Items;
  1737.     property LargeImages;
  1738.     property MultiSelect;
  1739.     property OwnerData;
  1740.     property OwnerDraw;
  1741.     property ReadOnly default False;
  1742.     property RowSelect;
  1743.     property ParentBiDiMode;
  1744.     property ParentColor default False;
  1745.     property ParentFont;
  1746.     property ParentShowHint;
  1747.     property PopupMenu;
  1748.     property ShowColumnHeaders;
  1749.     property ShowWorkAreas;
  1750.     property ShowHint;
  1751.     property SmallImages;
  1752.     property SortType;
  1753.     property StateImages;
  1754.     property TabOrder;
  1755.     property TabStop default True;
  1756.     property ViewStyle;
  1757.     property Visible;
  1758.     property OnAdvancedCustomDraw;
  1759.     property OnAdvancedCustomDrawItem;
  1760.     property OnAdvancedCustomDrawSubItem;
  1761.     property OnChange;
  1762.     property OnChanging;
  1763.     property OnClick;
  1764.     property OnColumnClick;
  1765.     property OnColumnDragged;
  1766.     property OnColumnRightClick;
  1767.     property OnCompare;
  1768.     property OnContextPopup;
  1769.     property OnCustomDraw;
  1770.     property OnCustomDrawItem;
  1771.     property OnCustomDrawSubItem;
  1772.     property OnData;
  1773.     property OnDataFind;
  1774.     property OnDataHint;
  1775.     property OnDataStateChange;
  1776.     property OnDblClick;
  1777.     property OnDeletion;
  1778.     property OnDrawItem;
  1779.     property OnEdited;
  1780.     property OnEditing;
  1781.     property OnEndDock;
  1782.     property OnEndDrag;
  1783.     property OnEnter;
  1784.     property OnExit;
  1785.     property OnGetImageIndex;
  1786.     property OnGetSubItemImage;
  1787.     property OnDragDrop;
  1788.     property OnDragOver;
  1789.     property OnInfoTip;
  1790.     property OnInsert;
  1791.     property OnKeyDown;
  1792.     property OnKeyPress;
  1793.     property OnKeyUp;
  1794.     property OnMouseDown;
  1795.     property OnMouseMove;
  1796.     property OnMouseUp;
  1797.     property OnResize;
  1798.     property OnSelectItem;
  1799.     property OnStartDock;
  1800.     property OnStartDrag;
  1801.   end;
  1802.  
  1803. { TListViewActionLink }
  1804.  
  1805.   TListViewActionLink = class(TListActionLink)
  1806.   protected
  1807.     procedure AddItem(AnItem: TListControlItem); override;
  1808.     procedure AddItem(ACaption: String; AImageIndex: Integer;
  1809.       DataPtr: Pointer); override;
  1810.     procedure SetImages(Value: TCustomImageList); override;
  1811.   end;
  1812.  
  1813. { TAnimate }
  1814.  
  1815.   TCommonAVI = (aviNone, aviFindFolder, aviFindFile, aviFindComputer, aviCopyFiles,
  1816.     aviCopyFile, aviRecycleFile, aviEmptyRecycle, aviDeleteFile);
  1817.  
  1818.   TAnimate = class(TWinControl)
  1819.   protected
  1820.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  1821.     procedure CreateParams(var Params: TCreateParams); override;
  1822.     procedure CreateWnd; override;
  1823.     procedure DestroyWnd; override;
  1824.     procedure DoOpen; virtual;
  1825.     procedure DoClose; virtual;
  1826.     procedure DoStart; virtual;
  1827.     procedure DoStop; virtual;
  1828.     procedure Loaded; override;
  1829.   public
  1830.     constructor Create(AOwner: TComponent); override;
  1831.     property FrameCount: Integer;
  1832.     property FrameHeight: Integer;
  1833.     property FrameWidth: Integer;
  1834.     property Open: Boolean;
  1835.     procedure Play(FromFrame, ToFrame: Word; Count: Integer);
  1836.     procedure Reset;
  1837.     procedure Seek(Frame: Smallint);
  1838.     procedure Stop;
  1839.     property ResHandle: THandle;
  1840.     property ResId: Integer;
  1841.     property ResName: string;
  1842.   published
  1843.     property Align;
  1844.     property Active: Boolean;
  1845.     property Anchors;
  1846.     property AutoSize default True;
  1847.     property BorderWidth;
  1848.     property Center: Boolean default True;
  1849.     property Color;
  1850.     property CommonAVI: TCommonAVI default aviNone;
  1851.     property Constraints;
  1852.     property FileName: string;
  1853.     property ParentColor;
  1854.     property ParentShowHint;
  1855.     property Repetitions: Integer default 0;
  1856.     property ShowHint;
  1857.     property StartFrame: Smallint default 1;
  1858.     property StopFrame: Smallint default 0;
  1859.     property Timers: Boolean default False;
  1860.     property Transparent: Boolean default True;
  1861.     property Visible;
  1862.     property OnOpen: TNotifyEvent;
  1863.     property OnClose: TNotifyEvent;
  1864.     property OnStart: TNotifyEvent;
  1865.     property OnStop: TNotifyEvent;
  1866.   end;
  1867.  
  1868. { TToolBar }
  1869.  
  1870. const
  1871.   CN_DROPDOWNCLOSED = WM_USER + $1000;
  1872.  
  1873. type
  1874.   TToolButtonStyle = (tbsButton, tbsCheck, tbsDropDown, tbsSeparator, tbsDivider);
  1875.  
  1876.   TToolButtonState = (tbsChecked, tbsPressed, tbsEnabled, tbsHidden,
  1877.     tbsIndeterminate, tbsWrap, tbsEllipses, tbsMarked);
  1878.  
  1879.   TToolBar = class;
  1880.   TToolButton = class;
  1881.  
  1882. { TToolButtonActionLink }
  1883.  
  1884.   TToolButtonActionLink = class(TControlActionLink)
  1885.   protected
  1886.     FClient: TToolButton;
  1887.     procedure AssignClient(AClient: TObject); override;
  1888.     function IsCheckedLinked: Boolean; override;
  1889.     function IsImageIndexLinked: Boolean; override;
  1890.     procedure SetChecked(Value: Boolean); override;
  1891.     procedure SetImageIndex(Value: Integer); override;
  1892.   end;
  1893.  
  1894.   TToolButtonActionLinkClass = class of TToolButtonActionLink;
  1895.  
  1896.   TToolButton = class(TGraphicControl)
  1897.   protected
  1898.     FToolBar: TToolBar;
  1899.     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  1900.     procedure AssignTo(Dest: TPersistent); override;
  1901.     procedure BeginUpdate; virtual;
  1902.     procedure EndUpdate; virtual;
  1903.     function GetActionLinkClass: TControlActionLinkClass; override;
  1904.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  1905.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1906.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1907.       X, Y: Integer); override;
  1908.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1909.     procedure Paint; override;
  1910.     procedure RefreshControl; virtual;
  1911.     procedure SetAutoSize(Value: Boolean); override;   
  1912.     procedure SetToolBar(AToolBar: TToolBar);
  1913.     procedure UpdateControl; virtual;
  1914.     procedure ValidateContainer(AComponent: TComponent); override;
  1915.   public
  1916.     constructor Create(AOwner: TComponent); override;
  1917.     function CheckMenuDropdown: Boolean; dynamic;
  1918.     procedure Click; override;
  1919.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  1920.     property Index: Integer;
  1921.   published
  1922.     property Action;
  1923.     property AllowAllUp: Boolean default False;
  1924.     property AutoSize: Boolean default False;
  1925.     property Caption;
  1926.     property Down: Boolean default False;
  1927.     property DragCursor;
  1928.     property DragKind;
  1929.     property DragMode;
  1930.     property DropdownMenu: TPopupMenu;
  1931.     property Enabled;
  1932.     property Grouped: Boolean default False;
  1933.     property Height stored False;
  1934.     property ImageIndex: TImageIndex default -1;
  1935.     property Indeterminate: Boolean default False;
  1936.     property Marked: Boolean default False;
  1937.     property MenuItem: TMenuItem;
  1938.     property ParentShowHint;
  1939.     property PopupMenu;
  1940.     property Wrap: Boolean default False;
  1941.     property ShowHint;
  1942.     property Style: TToolButtonStyle default tbsButton;
  1943.     property Visible;
  1944.     property Width stored IsWidthStored;
  1945.     property OnClick;
  1946.     property OnContextPopup;
  1947.     property OnDragDrop;
  1948.     property OnDragOver;
  1949.     property OnEndDock;
  1950.     property OnEndDrag;
  1951.     property OnMouseDown;
  1952.     property OnMouseMove;
  1953.     property OnMouseUp;
  1954.     property OnStartDock;
  1955.     property OnStartDrag;
  1956.   end;
  1957.  
  1958.   TTBCustomDrawFlags = set of (tbNoEdges, tbHiliteHotTrack, tbNoOffset,
  1959.     tbNoMark, tbNoEtchedEffect);
  1960.  
  1961.   TTBCustomDrawEvent = procedure(Sender: TToolBar; const ARect: TRect;
  1962.     var DefaultDraw: Boolean) of object;
  1963.   TTBCustomDrawBtnEvent = procedure(Sender: TToolBar; Button: TToolButton;
  1964.     State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  1965.   TTBAdvancedCustomDrawEvent = procedure(Sender: TToolBar; const ARect: TRect;
  1966.     Stage: TCustomDrawStage; var DefaultDraw: Boolean) of object;
  1967.   TTBAdvancedCustomDrawBtnEvent = procedure(Sender: TToolBar; Button: TToolButton;
  1968.     State: TCustomDrawState; Stage: TCustomDrawStage;
  1969.     var Flags: TTBCustomDrawFlags; var DefaultDraw: Boolean) of object;
  1970.   TTBCustomizeQueryEvent = procedure(Sender: TToolbar; Index: Integer;
  1971.     var Allow: Boolean) of object;
  1972.   TTBNewButtonEvent = procedure(Sender: TToolbar; Index: Integer;
  1973.     var Button: TToolButton) of object;
  1974.   TTBButtonEvent = procedure(Sender: TToolbar; Button: TToolButton) of object;
  1975.  
  1976.   TToolBar = class(TToolWindow)
  1977.   protected
  1978.     procedure AlignControls(AControl: TControl; var Rect: TRect); override;
  1979.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  1980.     procedure CancelMenu; dynamic;
  1981.     procedure ChangeScale(M, D: Integer); override;
  1982.     function CheckMenuDropdown(Button: TToolButton): Boolean; dynamic;
  1983.     procedure ClickButton(Button: TToolButton); dynamic;
  1984.     procedure CreateParams(var Params: TCreateParams); override;
  1985.     procedure CreateWnd; override;
  1986.     function  CustomDraw(const ARect: TRect; Stage: TCustomDrawStage): Boolean; virtual;
  1987.     function CustomDrawButton(Button: TToolButton; State: TCustomDrawState;
  1988.       Stage: TCustomDrawStage; var Flags: TTBCustomDrawFlags): Boolean; virtual;
  1989.     function DoQueryInsert(Index: Integer): Boolean; virtual;
  1990.     function DoQueryDelete(Index: Integer): Boolean; virtual;
  1991.     function FindButtonFromAccel(Accel: Word): TToolButton;
  1992.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  1993.     procedure InitMenu(Button: TToolButton); dynamic;
  1994.     function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean; virtual;
  1995.     procedure Loaded; override;
  1996.     procedure Notification(AComponent: TComponent;
  1997.       Operation: TOperation); override;
  1998.     procedure RepositionButton(Index: Integer);
  1999.     procedure RepositionButtons(Index: Integer);
  2000.     procedure WndProc(var Message: TMessage); override;
  2001.     function WrapButtons(var NewWidth, NewHeight: Integer): Boolean;
  2002.   public
  2003.     constructor Create(AOwner: TComponent); override;
  2004.     destructor Destroy; override;
  2005.     procedure FlipChildren(AllLevels: Boolean); override;
  2006.     function TrackMenu(Button: TToolButton): Boolean; dynamic;
  2007.     property ButtonCount: Integer;
  2008.     property Buttons[Index: Integer]: TToolButton;
  2009.     property Canvas: TCanvas;
  2010.     property CustomizeKeyName: string;
  2011.     property CustomizeValueName: string;
  2012.     property RowCount: Integer;
  2013.   published
  2014.     property Align default alTop;
  2015.     property Anchors;
  2016.     property AutoSize;
  2017.     property BorderWidth;
  2018.     property ButtonHeight: Integer default 22;
  2019.     property ButtonWidth: Integer default 23;
  2020.     property Caption;
  2021.     property Color;
  2022.     property Constraints;
  2023.     property Ctl3D;
  2024.     property Customizable: Boolean default False;
  2025.     property DisabledImages: TCustomImageList;
  2026.     property DockSite;
  2027.     property DragCursor;
  2028.     property DragKind;
  2029.     property DragMode;
  2030.     property EdgeBorders default [ebTop];
  2031.     property EdgeInner;
  2032.     property EdgeOuter;
  2033.     property Enabled;
  2034.     property Flat: Boolean default False;
  2035.     property Font;
  2036.     property Height default 32;
  2037.     property HotImages: TCustomImageList;
  2038.     property Images: TCustomImageList;
  2039.     property Indent: Integer default 0;
  2040.     property List: Boolean default False;
  2041.     property Menu: TMainMenu;
  2042.     property ParentColor;
  2043.     property ParentFont;
  2044.     property ParentShowHint;
  2045.     property PopupMenu;
  2046.     property ShowCaptions: Boolean default False;
  2047.     property ShowHint;
  2048.     property TabOrder;
  2049.     property TabStop;
  2050.     property Transparent: Boolean default False;
  2051.     property Visible;
  2052.     property Wrapable: Boolean default True;
  2053.     property OnAdvancedCustomDraw: TTBAdvancedCustomDrawEvent;
  2054.     property OnAdvancedCustomDrawButton: TTBAdvancedCustomDrawBtnEvent;
  2055.     property OnClick;
  2056.     property OnContextPopup;
  2057.     property OnCustomDraw: TTBCustomDrawEvent;
  2058.     property OnCustomDrawButton: TTBCustomDrawBtnEvent;
  2059.     property OnCustomizeAdded: TTBButtonEvent;
  2060.     property OnCustomizeCanInsert: TTBCustomizeQueryEvent;
  2061.     property OnCustomizeCanDelete: TTBCustomizeQueryEvent;
  2062.     property OnCustomized: TNotifyEvent;
  2063.     property OnCustomizeDelete: TTBButtonEvent;
  2064.     property OnCustomizing: TNotifyEvent;
  2065.     property OnCustomizeNewButton: TTBNewButtonEvent;
  2066.     property OnCustomizeReset: TNotifyEvent;
  2067.     property OnDblClick;
  2068.     property OnDockDrop;
  2069.     property OnDockOver;
  2070.     property OnDragDrop;
  2071.     property OnDragOver;
  2072.     property OnEndDock;
  2073.     property OnEndDrag;
  2074.     property OnEnter;
  2075.     property OnExit;
  2076.     property OnGetSiteInfo;
  2077.     property OnMouseDown;
  2078.     property OnMouseMove;
  2079.     property OnMouseUp;
  2080.     property OnResize;
  2081.     property OnStartDock;
  2082.     property OnStartDrag;
  2083.     property OnUnDock;
  2084.   end;
  2085.  
  2086.   TToolBarDockObject = class(TDragDockObject)
  2087.   protected
  2088.     procedure AdjustDockRect(ARect: TRect); override;
  2089.     procedure DrawDragDockImage; override;
  2090.     procedure EraseDragDockImage; override;
  2091.     function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override;
  2092.     function ToolDockImage(Erase: Boolean): Boolean; virtual;
  2093.   end;
  2094.  
  2095. { TCoolBar }
  2096.  
  2097. const
  2098.   CN_BANDCHANGE = WM_USER + $1000;
  2099.  
  2100. type
  2101.   TCoolBar = class;
  2102.  
  2103.   TCoolBand = class(TCollectionItem)
  2104.   protected
  2105.     function GetDisplayName: string; override;
  2106.     procedure ParentColorChanged; dynamic;
  2107.     procedure ParentBitmapChanged; dynamic;
  2108.   public
  2109.     constructor Create(Collection: TCollection); override;
  2110.     destructor Destroy; override;
  2111.     procedure Assign(Source: TPersistent); override;
  2112.     property Height: Integer;
  2113.   published
  2114.     property Bitmap: TBitmap;
  2115.     property BorderStyle: TBorderStyle default bsNone;
  2116.     property Break: Boolean default True;
  2117.     property Color: TColor default clBtnFace;
  2118.     property Control: TWinControl;
  2119.     property FixedBackground: Boolean default True;
  2120.     property FixedSize: Boolean default False;
  2121.     property HorizontalOnly: Boolean default False;
  2122.     property ImageIndex: TImageIndex;
  2123.     property MinHeight: Integer default 25;
  2124.     property MinWidth: Integer default 0;
  2125.     property ParentColor: Boolean default True;
  2126.     property ParentBitmap: Boolean default True;
  2127.     property Text: string;
  2128.     property Visible: Boolean default True;
  2129.     property Width: Integer;
  2130.   end;
  2131.  
  2132.   TCoolBands = class(TCollection)
  2133.   protected
  2134.     function GetOwner: TPersistent; override;
  2135.     procedure Update(Item: TCollectionItem); override;
  2136.     function HaveGraphic: Boolean;
  2137.   public
  2138.     constructor Create(CoolBar: TCoolBar);
  2139.     function Add: TCoolBand;
  2140.     function FindBand(AControl: TControl): TCoolBand;
  2141.     property CoolBar: TCoolBar;
  2142.     property Items[Index: Integer]: TCoolBand; default;
  2143.   end;
  2144.  
  2145.   TCoolBandMaximize = (bmNone, bmClick, bmDblClick);
  2146.  
  2147.   TCoolBar = class(TToolWindow)
  2148.   protected
  2149.     procedure AlignControls(AControl: TControl; var Rect: TRect); override;
  2150.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  2151.     procedure Change; dynamic;
  2152.     procedure CreateParams(var Params: TCreateParams); override;
  2153.     procedure CreateWnd; override;
  2154.     function GetPalette: HPALETTE; override;
  2155.     function HitTest(const Pos: TPoint): TCoolBand;
  2156.     procedure Loaded; override;
  2157.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  2158.     procedure WndProc(var Message: TMessage); override;
  2159.     procedure PaintWindow(DC: HDC); override;
  2160.   public
  2161.     constructor Create(AOwner: TComponent); override;
  2162.     destructor Destroy; override;
  2163.     procedure FlipChildren(AllLevels: Boolean); override;
  2164.   published
  2165.     property Align read GetAlign write SetAlign default alTop;
  2166.     property Anchors;
  2167.     property AutoSize;
  2168.     property BandBorderStyle: TBorderStyle default bsSingle;
  2169.     property BandMaximize: TCoolBandMaximize default bmClick;
  2170.     property Bands: TCoolBands;
  2171.     property BorderWidth;
  2172.     property Color;
  2173.     property Constraints;
  2174.     property Ctl3D;
  2175.     property DockSite;
  2176.     property DragCursor;
  2177.     property DragKind;
  2178.     property DragMode;
  2179.     property EdgeBorders;
  2180.     property EdgeInner;
  2181.     property EdgeOuter;
  2182.     property Enabled;
  2183.     property FixedSize: Boolean default False;
  2184.     property FixedOrder: Boolean default False;
  2185.     property Font;
  2186.     property Images: TCustomImageList;
  2187.     property ParentColor;
  2188.     property ParentFont;
  2189.     property ParentShowHint;
  2190.     property Bitmap: TBitmap;
  2191.     property PopupMenu;
  2192.     property ShowHint;
  2193.     property ShowText: Boolean default True;
  2194.     property Vertical: Boolean default False;
  2195.     property Visible;
  2196.     property OnChange: TNotifyEvent;
  2197.     property OnClick;
  2198.     property OnContextPopup;
  2199.     property OnDblClick;
  2200.     property OnDockDrop;
  2201.     property OnDockOver;
  2202.     property OnDragDrop;
  2203.     property OnDragOver;
  2204.     property OnEndDock;
  2205.     property OnEndDrag;
  2206.     property OnGetSiteInfo;
  2207.     property OnMouseDown;
  2208.     property OnMouseMove;
  2209.     property OnMouseUp;
  2210.     property OnResize;
  2211.     property OnStartDock;
  2212.     property OnStartDrag;
  2213.     property OnUnDock;
  2214.   end;
  2215.  
  2216. { Calendar common control support }
  2217.  
  2218.   TCommonCalendar = class;
  2219.  
  2220.   ECommonCalendarError = class(Exception);
  2221.  
  2222.   TMonthCalColors = class(TPersistent)
  2223.   public
  2224.     constructor Create(AOwner: TCommonCalendar);
  2225.     procedure Assign(Source: TPersistent); override;
  2226.   published
  2227.     property BackColor: TColor index 0 default clWindow;
  2228.     property TextColor: TColor index 1 default clWindowText;
  2229.     property TitleBackColor: TColor index 2 default clActiveCaption;
  2230.     property TitleTextColor: TColor index 3 default clWhite;
  2231.     property MonthBackColor: TColor index 4 default clWhite;
  2232.     property TrailingTextColor: TColor index 5 default clInactiveCaptionText;
  2233.   end;
  2234.  
  2235.   TCalDayOfWeek = (dowMonday, dowTuesday, dowWednesday, dowThursday,
  2236.     dowFriday, dowSaturday, dowSunday, dowLocaleDefault);
  2237.  
  2238.   TOnGetMonthInfoEvent = procedure(Sender: TObject; Month: LongWord;
  2239.     var MonthBoldInfo: LongWord) of object;
  2240.  
  2241.   TCommonCalendar = class(TWinControl)
  2242.   protected
  2243.     procedure CheckEmptyDate; virtual;
  2244.     procedure CheckValidDate(Value: TDate); virtual;
  2245.     procedure CreateWnd; override;
  2246.     function GetCalendarHandle: HWND; virtual; abstract;
  2247.     function GetCalStyles: DWORD; virtual;
  2248.     function MsgSetCalColors(ColorIndex: Integer; ColorValue: TColor): Boolean; virtual; abstract;
  2249.     function MsgSetDateTime(Value: TSystemTime): Boolean; virtual; abstract;
  2250.     function MsgSetRange(Flags: Integer; SysTime: PSystemTime): Boolean; virtual; abstract;
  2251.     property CalColors: TMonthCalColors;
  2252.     property CalendarHandle: HWND;
  2253.     property CalExceptionClass: ExceptClass;
  2254.     property Date: TDate;
  2255.     property DateTime: TDateTime;
  2256.     property EndDate: TDate;
  2257.     property FirstDayOfWeek: TCalDayOfWeek default dowLocaleDefault;
  2258.     property MaxDate: TDate;
  2259.     property MaxSelectRange: Integer default 31;
  2260.     property MinDate: TDate;
  2261.     property MonthDelta: Integer default 1;
  2262.     property MultiSelect: Boolean default False;
  2263.     property ShowToday: Boolean default True;
  2264.     property ShowTodayCircle: Boolean default True;
  2265.     property WeekNumbers: Boolean default False;
  2266.     property OnGetMonthInfo: TOnGetMonthInfoEvent;
  2267.   public
  2268.     constructor Create(AOwner: TComponent); override;
  2269.     destructor Destroy; override;
  2270.     procedure BoldDays(Days: array of LongWord; var MonthBoldInfo: LongWord);
  2271.   end;
  2272.  
  2273. { TMonthCalendar }
  2274.  
  2275.   EMonthCalError = class(ECommonCalendarError);
  2276.  
  2277.   TMonthCalendar = class(TCommonCalendar)
  2278.   protected
  2279.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  2280.     procedure ConstrainedResize(var MinWidth, MinHeight, MaxWidth,
  2281.       MaxHeight: Integer); override;
  2282.     procedure CreateParams(var Params: TCreateParams); override;
  2283.     function GetCalendarHandle: HWND; override;
  2284.     function MsgSetCalColors(ColorIndex: Integer; ColorValue: TColor): Boolean; override;
  2285.     function MsgSetDateTime(Value: TSystemTime): Boolean; override;
  2286.     function MsgSetRange(Flags: Integer; SysTime: PSystemTime): Boolean; override;
  2287.   public
  2288.     constructor Create(AOwner: TComponent); override;
  2289.   published
  2290.     property Align;
  2291.     property Anchors;
  2292.     property AutoSize;
  2293.     property BorderWidth;
  2294.     property BiDiMode;
  2295.     property CalColors;
  2296.     property Constraints;
  2297.     property MultiSelect;  // must be before date stuff
  2298.     property Date;
  2299.     property DragCursor;
  2300.     property DragKind;
  2301.     property DragMode;
  2302.     property Enabled;
  2303.     property EndDate;
  2304.     property FirstDayOfWeek;
  2305.     property Font;
  2306.     property ImeMode;
  2307.     property ImeName;
  2308.     property MaxDate;
  2309.     property MaxSelectRange;
  2310.     property MinDate;
  2311.     property ParentBiDiMode;
  2312.     property ParentFont;
  2313.     property ParentShowHint;
  2314.     property PopupMenu;
  2315.     property ShowHint;
  2316.     property ShowToday;
  2317.     property ShowTodayCircle;
  2318.     property TabOrder;
  2319.     property TabStop;
  2320.     property Visible;
  2321.     property WeekNumbers;
  2322.     property OnClick;
  2323.     property OnContextPopup;
  2324.     property OnDblClick;
  2325.     property OnDragDrop;
  2326.     property OnDragOver;
  2327.     property OnEndDock;
  2328.     property OnEndDrag;
  2329.     property OnEnter;
  2330.     property OnExit;
  2331.     property OnGetMonthInfo;
  2332.     property OnKeyDown;
  2333.     property OnKeyPress;
  2334.     property OnKeyUp;
  2335.     property OnStartDock;
  2336.     property OnStartDrag;
  2337.   end;
  2338.  
  2339. { TDateTimePicker }
  2340.  
  2341.   EDateTimeError = class(ECommonCalendarError);
  2342.  
  2343.   TDateTimeKind = (dtkDate, dtkTime);
  2344.   TDTDateMode = (dmComboBox, dmUpDown);
  2345.   TDTDateFormat = (dfShort, dfLong);
  2346.   TDTCalAlignment = (dtaLeft, dtaRight);
  2347.  
  2348.   TDTParseInputEvent = procedure(Sender: TObject; const UserString: string;
  2349.     var DateAndTime: TDateTime; var AllowChange: Boolean) of object;
  2350.  
  2351.   TDateTimeColors = TMonthCalColors;  // for backward compatibility
  2352.  
  2353.   TDateTimePicker = class(TCommonCalendar)
  2354.   protected
  2355.     procedure CheckEmptyDate; override;
  2356.     procedure CreateParams(var Params: TCreateParams); override;
  2357.     procedure CreateWnd; override;
  2358.     procedure Change; dynamic;
  2359.     function GetCalendarHandle: HWND; override;
  2360.     function MsgSetCalColors(ColorIndex: Integer; ColorValue: TColor): Boolean; override;
  2361.     function MsgSetDateTime(Value: TSystemTime): Boolean; override;
  2362.     function MsgSetRange(Flags: Integer; SysTime: PSystemTime): Boolean; override;
  2363.   public
  2364.     constructor Create(AOwner: TComponent); override;
  2365.     property DateTime;
  2366.     property DroppedDown: Boolean;
  2367.   published
  2368.     property Anchors;
  2369.     property BevelEdges;
  2370.     property BevelInner;
  2371.     property BevelOuter;
  2372.     property BevelKind default bkNone;
  2373.     property BevelWidth;
  2374.     property BiDiMode;
  2375.     property CalAlignment: TDTCalAlignment;
  2376.     property CalColors;
  2377.     property Constraints;
  2378.     // The Date, Time, ShowCheckbox, and Checked properties must be in this order:
  2379.     property Date;
  2380.     property Format: String;
  2381.     property Time: TTime;
  2382.     property ShowCheckbox: Boolean default False;
  2383.     property Checked: Boolean default True;
  2384.     property Color stored True default clWindow;
  2385.     property DateFormat: TDTDateFormat;
  2386.     property DateMode: TDTDateMode;
  2387.     property DragCursor;
  2388.     property DragKind;
  2389.     property DragMode;
  2390.     property Enabled;
  2391.     property Font;
  2392.     property ImeMode;
  2393.     property ImeName;
  2394.     property Kind: TDateTimeKind;
  2395.     property MaxDate;
  2396.     property MinDate;
  2397.     property ParseInput: Boolean;
  2398.     property ParentBiDiMode;
  2399.     property ParentColor default False;
  2400.     property ParentFont;
  2401.     property ParentShowHint;
  2402.     property PopupMenu;
  2403.     property ShowHint;
  2404.     property TabOrder;
  2405.     property TabStop default True;
  2406.     property Visible;
  2407.     property OnClick;
  2408.     property OnCloseUp: TNotifyEvent;
  2409.     property OnChange: TNotifyEvent;
  2410.     property OnContextPopup;
  2411.     property OnDropDown: TNotifyEvent;
  2412.     property OnDblClick;
  2413.     property OnDragDrop;
  2414.     property OnDragOver;
  2415.     property OnEndDock;
  2416.     property OnEndDrag;
  2417.     property OnEnter;
  2418.     property OnExit;
  2419.     property OnKeyDown;
  2420.     property OnKeyPress;
  2421.     property OnKeyUp;
  2422.     property OnStartDock;
  2423.     property OnStartDrag;
  2424.     property OnUserInput: TDTParseInputEvent;
  2425.   end;
  2426.  
  2427. { TPageScroller }
  2428.  
  2429.   TPageScrollerOrientation = (soHorizontal, soVertical);
  2430.   TPageScrollerButton = (sbFirst, sbLast);
  2431.   TPageScrollerButtonState = (bsNormal, bsInvisible, bsGrayed, bsDepressed, bsHot);
  2432.  
  2433.   TPageScrollEvent = procedure (Sender: TObject; Shift: TShiftState; X, Y: Integer;
  2434.     Orientation: TPageScrollerOrientation; var Delta: Integer) of object;
  2435.  
  2436.   TPageScroller = class(TWinControl)
  2437.   protected
  2438.     procedure AlignControls(AControl: TControl; var Rect: TRect); override;
  2439.     procedure CreateParams(var Params: TCreateParams); override;
  2440.     procedure CreateWnd; override;
  2441.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  2442.     procedure Scroll(Shift: TShiftState; X, Y: Integer;
  2443.       Orientation: TPageScrollerOrientation; var Delta: Integer); dynamic;
  2444.   public
  2445.     constructor Create(AOwner: TComponent); override;
  2446.     function GetButtonState(Button: TPageScrollerButton): TPageScrollerButtonState;
  2447.   published
  2448.     property Align;
  2449.     property Anchors;
  2450.     property AutoScroll: Boolean;
  2451.     property BorderWidth;
  2452.     property ButtonSize: Integer default 12;
  2453.     property Color;
  2454.     property Constraints;
  2455.     property Control: TWinControl;
  2456.     property DockSite;
  2457.     property DragCursor;
  2458.     property DragKind;
  2459.     property DragMode;
  2460.     property DragScroll: Boolean default True;
  2461.     property Enabled;
  2462.     property Font;
  2463.     property Margin: Integer default 0;
  2464.     property Orientation: TPageScrollerOrientation default soHorizontal;
  2465.     property ParentColor;
  2466.     property ParentFont;
  2467.     property ParentShowHint;
  2468.     property PopupMenu;
  2469.     property Position: Integer default 0;
  2470.     property ShowHint;
  2471.     property TabOrder;
  2472.     property TabStop default True;
  2473.     property Visible;
  2474.     property OnClick;
  2475.     property OnContextPopup;
  2476.     property OnDblClick;
  2477.     property OnDragDrop;
  2478.     property OnDragOver;
  2479.     property OnEndDock;
  2480.     property OnEndDrag;
  2481.     property OnEnter;
  2482.     property OnExit;
  2483.     property OnKeyDown;
  2484.     property OnKeyPress;
  2485.     property OnKeyUp;
  2486.     property OnMouseWheel;
  2487.     property OnResize;
  2488.     property OnScroll: TPageScrollEvent;
  2489.     property OnStartDock;
  2490.     property OnStartDrag;
  2491.   end;
  2492.  
  2493. { TCustomComboBoxEx }
  2494.  
  2495.   TComboExItem = class(TListControlItem)
  2496.   protected
  2497.     procedure SetOverlayImageIndex(const Value: TImageIndex); virtual;
  2498.     procedure SetSelectedImageIndex(const Value: TImageIndex); virtual;
  2499.     procedure SetCaption(const Value: String); override;
  2500.     procedure SetData(const Value: Pointer); override;
  2501.     procedure SetDisplayName(const Value: String); override;
  2502.     procedure SetImageIndex(const Value: TImageIndex); override;
  2503.     procedure SetIndex(Value: Integer); override;
  2504.   public
  2505.     procedure Assign(Source: TPersistent); override;
  2506.   published
  2507.     property Indent: Integer default -1;
  2508.     property OverlayImageIndex: TImageIndex default -1;
  2509.     property SelectedImageIndex: TImageIndex default -1;
  2510.   end;
  2511.  
  2512.   TComboExItems = class(TListControlItems)
  2513.   protected
  2514.     procedure Notify(Item: TCollectionItem;
  2515.       Action: TCollectionNotification); override;
  2516.     procedure SetItem(const Index: Integer); virtual;
  2517.   public
  2518.     function Add: TComboExItem;
  2519.     function AddItem(const Caption: String; const ImageIndex, SelectedImageIndex,
  2520.       OverlayImageIndex, Indent: Integer; Data: Pointer): TComboExItem;
  2521.     function Insert(Index: Integer): TComboExItem;
  2522.     property ComboItems[const Index: Integer]: TComboExItem;
  2523.   end;
  2524.  
  2525.   TComboExItemsClass = class of TComboExItems;
  2526.   TComboExItemClass = class of TComboExItem;
  2527.  
  2528.   TCustomComboBoxEx = class;
  2529.  
  2530.   TComboBoxExStrings = class(TCustomComboBoxStrings)
  2531.   protected
  2532.     function GetItemsClass: TComboExItemsClass; virtual;
  2533.     function GetItemClass: TComboExItemClass; virtual;
  2534.     procedure Put(Index: Integer; const S: String); override;
  2535.     procedure PutObject(Index: Integer; AObject: TObject); override;
  2536.     procedure SetUpdateState(Updating: Boolean); override;
  2537.   public
  2538.     constructor Create(Owner: TCustomComboBoxEx);
  2539.     destructor Destroy; override;
  2540.     function Add(const S: String): Integer; override;
  2541.     function AddItem(const Caption: String; const ImageIndex, SelectedImageIndex,
  2542.       OverlayImageIndex, Indent: Integer; Data: Pointer): TComboExItem;
  2543.     function AddObject(const S: String; AObject: TObject): Integer; override;
  2544.     procedure Clear; override;
  2545.     procedure Delete(Index: Integer); override;
  2546.     procedure Exchange(Index1: Integer; Index2: Integer); override;
  2547.     function Get(Index: Integer): String; override;
  2548.     function GetCapacity: Integer; override;
  2549.     function GetCount: Integer; override;
  2550.     function GetObject(Index: Integer): TObject; override;
  2551.     function IndexOf(const S: String): Integer; override;
  2552.     function IndexOfName(const Name: String): Integer; override;
  2553.     procedure Insert(Index: Integer; const S: String); override;
  2554.     procedure Move(CurIndex: Integer; NewIndex: Integer); override;
  2555.     property SortType: TListItemsSortType;
  2556.     property ItemsEx: TComboExItems;
  2557.   end;
  2558.  
  2559. { TCustomComboBoxEx }
  2560.  
  2561.   TComboBoxExStyle = (csExDropDown, csExSimple, csExDropDownList);
  2562.   TComboBoxExStyleEx = (csExCaseSensitive, csExNoEditImage, csExNoEditImageIndent,
  2563.                         csExNoSizeLimit, csExPathWordBreak);
  2564.   TComboBoxExStyles = set of TComboBoxExStyleEx;
  2565.  
  2566.   TCustomComboBoxEx = class(TCustomCombo)
  2567.   protected
  2568.     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  2569.     procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
  2570.     procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED;
  2571.     procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
  2572.     procedure ComboExWndProc(var Message: TMessage);
  2573.     procedure CreateParams(var Params: TCreateParams); override;
  2574.     procedure CreateWnd; override;
  2575.     procedure DestroyWnd; override;
  2576.     function GetActionLinkClass: TControlActionLinkClass; override;
  2577.     function GetItemsClass: TCustomComboBoxStringsClass; override;
  2578.     function GetItemCount: Integer; override;
  2579.     function GetItemHt: Integer; override;
  2580.     procedure Notification(AComponent: TComponent;
  2581.       Operation: TOperation); override;
  2582.     procedure SetDropDownCount(const Value: Integer); override;
  2583.     procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
  2584.     procedure WndProc(var Message: TMessage); override;
  2585.   public
  2586.     constructor Create(AOwner: TComponent); override;
  2587.     destructor Destroy; override;
  2588.     function Focused: Boolean; override;
  2589.     property DropDownCount: Integer;
  2590.     property Images: TCustomImageList;
  2591.     property ItemsEx: TComboExItems;
  2592.     property SelText: string;
  2593.     property Style: TComboBoxExStyle default csExDropDown;
  2594.     property StyleEx: TComboBoxExStyles;
  2595.     property OnBeginEdit: TNotifyEvent;
  2596.     property OnEndEdit: TNotifyEvent;
  2597.   end;
  2598.  
  2599. { TComboBoxEx }
  2600.  
  2601.   TComboBoxEx = class(TCustomComboBoxEx)
  2602.   published
  2603.     property ItemsEx;
  2604.     property Style; {Must be published before Items}
  2605.     property StyleEx;
  2606.     property Action;
  2607.     property Anchors;
  2608.     property BiDiMode;
  2609.     property Color;
  2610.     property Constraints;
  2611.     property Ctl3D;
  2612.     property DragCursor;
  2613.     property DragKind;
  2614.     property DragMode;
  2615.     property Enabled;
  2616.     property Font;
  2617.     property ImeMode;
  2618.     property ImeName;
  2619.     property ItemHeight;
  2620.     property MaxLength;
  2621.     property ParentBiDiMode;
  2622.     property ParentColor;
  2623.     property ParentCtl3D;
  2624.     property ParentFont;
  2625.     property ParentShowHint;
  2626.     property PopupMenu;
  2627.     property ShowHint;
  2628.     property TabOrder;
  2629.     property TabStop;
  2630.     property Text;
  2631.     property Visible;
  2632.     property OnBeginEdit;
  2633.     property OnChange;
  2634.     property OnClick;
  2635.     property OnContextPopup;
  2636.     property OnDblClick;
  2637.     property OnDragDrop;
  2638.     property OnDragOver;
  2639.     property OnDropDown;
  2640.     property OnEndEdit;
  2641.     property OnEndDock;
  2642.     property OnEndDrag;
  2643.     property OnEnter;
  2644.     property OnExit;
  2645.     property OnKeyDown;
  2646.     property OnKeyPress;
  2647.     property OnKeyUp;
  2648.     property OnSelect;
  2649.     property OnStartDock;
  2650.     property OnStartDrag;
  2651. //    property Items;
  2652.     property Images;
  2653.     property DropDownCount;
  2654.   end;
  2655.  
  2656. { TComboBoxExActionLink }
  2657.  
  2658.   TComboBoxExActionLink = class(TListActionLink)
  2659.   protected
  2660.     procedure AddItem(AnItem: TListControlItem); override;
  2661.     procedure AddItem(ACaption: String; AImageIndex: Integer;
  2662.       DataPtr: Pointer); override;
  2663.   end;
  2664.  
  2665. function InitCommonControl(CC: Integer): Boolean;
  2666. procedure CheckCommonControl(CC: Integer);
  2667.  
  2668. const
  2669.   ComCtlVersionIE3 = $00040046;
  2670.   ComCtlVersionIE4 = $00040047;
  2671.   ComCtlVersionIE401 = $00040048;
  2672.   ComCtlVersionIE5 = $00050050;
  2673.  
  2674. function GetComCtlVersion: Integer;
  2675. procedure CheckToolMenuDropdown(ToolButton: TToolButton);
  2676.  
  2677. implementation
  2678.